我正在尝试读取SQL查询输出并使用Python大熊猫创建SAS数据集。我的SQL查询执行正常,但由于数据移位,仅将列名导入SAS数据集。这是一个编码问题,我希望获得有关如何解决此问题的指导。下面是我的代码:
with open ('Query.sql', mode = 'r', encoding='utf-8-sig') as sql_input:
sql_input = sql_input.read()
My_string = str('mssql+pyodbc://USER:Pass' + server + '/' + database + '?driver=SQL+Server+Native+Client+11.0')
engine = My_engine(My_string)
df = pd.read_sql_query(sql_input,engine)
Viya = saspy.SASsession(omruser='User', omrpw='PWD', cfgfile='cfgfile.py')
Viya.submit('libname lib "path";')
Viya.df2sd(df=df3, table='Test', libref='lib')
然后创建SAS Viya Session,并使用路径和数据集名称提交。当我检查SAS数据集时,我只会看到创建的列。
错误:INPUT语句超出记录长度。指定了INFILE CARDS OPTION STOPOVER。
有什么建议?
首先,我猜您可能在数据中嵌入了一些换行符。
请参阅此github问题,它具有与您相同的错误消息。(还请注意初始帖子中的详细信息-这与您的初始帖子应该是什么样子有关!)
如果您至少具有SASPy 3.1.4版本,则应该有一个embedded_newlines=true
可以设置的选项,示例代码:
sas.dataframe2sasdata(df = problematic_data,table ='via_sas_test_prob',libref ='OUT',Embedded_newlines = True)
(df2sd
顺便说一下,这是的别名)。希望能在维雅工作;SASPy主要运行基本(MVA)SAS,所以我不知道Viya(也没有Viya)有什么不同。如果您没有3.1.4或更高版本,请更新您的SASPy。
另一种选择是\n
在传输数据之前,删除Python中的换行符()。这就是github问题中的用户所做的。
其次,如果您正在Viya中运行内容,请考虑使用python-SWAT,它是Python中的SAS Viya脚本库。它将事物提交为CAS动作,这可能对您更好。
最后,第三种选择是在SAS中运行数据库连接。当然,除非您没有将ACCESS许可给ODBC,但是如果您许可了该许可,那么我会考虑将其移至SAS,而只是告诉SAS输入文件本身。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句