【问题标题】:SAS/Python: How to make table name dynamic using date parameter?SAS/Python:如何使用日期参数使表名动态化?
【发布时间】:2022-01-28 20:42:01
【问题描述】:

我已将 SAS 连接到 python 并尝试提取数据。日期附在表名上,我不允许更改表格式(total.gross_data_20211201)。该表应该是动态的薪水日期。我尝试了以下方法,但它不起作用。我希望应该应用“用户日期”来使表名动态化。请提出建议。

import saspy
salary_date = (pd.to_datetime('01-Dec-2021').strftime('%d-%b-%Y')).upper()
user_date = dt.datetime.strptime(salary_date, '%d-%b-%Y').strftime('%Y%m%d')
sas.symput('user_date', user_date)
xyz = sas.submit("""proc sql;
             create table data_extract as
             select ID
             FROM total.gross_data_20211201
       ;quit; """)

【问题讨论】:

  • 你是说不能改变数据集的结构?数据集的名称?还是用于创建数据集名称的样式?目标是更改运行的 SAS 代码吗?或者更改从正在运行的 SAS 创建的 python 对象的名称?
  • @Tom 我无法根据日期更改表名...'total.gross_data_20211201'或'total.gross_data_20211202'或'total.gross_data_20211205'...表名的最后一部分,我想保持动态。基于 user_date。

标签: python date sas


【解决方案1】:

您可以在 SAS 或 Python 中更改此设置,但鉴于您在 python 中提交此设置,您似乎应该在此处进行。

在这种情况下,您只是将一个字符串提交给sas.submit - 所以使用您在 python 中修改内容的任何常规方式对其进行修改。格式化字符串是最典型的做法。

但你也可以在 SAS 代码中使用&user_date,所以

FROM total.gross_data_&user_date.

【讨论】:

  • @Joe..这正是我尝试过的方式,但它不起作用'FROM total.gross_data_&user_date'....可能需要另一个设置来更改表名。
  • 我会用 Python,而不是 SAS,因为信息在 python 中......但是那里的 SAS 代码非常好,所以要么你有错误,要么发生其他事情(也许SYMPUT 无法正常工作)。我通常不使用它,所以我不知道您是否在该语法中有错误,但我会从 %put &userdate; 作为您的 SAS 代码开始,然后从那里开始
  • 如果我硬编码表中的日期,我可以提取数据,但如果我使用 FROM total.gross_data_&user_date。我正在返回空数据框。
  • 您的 SAS 代码很可能有问题;查看您的 SAS 日志(在 xyz 对象中返回)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-08
  • 2014-07-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多