【发布时间】:2016-08-24 07:16:49
【问题描述】:
我对 SAS 有点陌生。我正在尝试更新文件名以通过循环写入 excel 文件,但在分配文件名时遇到问题。这是我的代码:
%MACRO loop;
%DO year1 = 1995 %TO 2008;
DATA _NULL_;
dailyret = catx(STRIP(&year1),
'''/h1/usr11/angeli/finland/haz/phreg_dailyret_', '.csv''');
*to save output to excel;
ODS TAGSETS.EXCELXP
file= %QUOTE(dailyret)
STYLE=minimal
OPTIONS ( Orientation = 'landscape'
FitToPage = 'yes'
Pages_FitWidth = '1'
Pages_FitHeight = '100' );
*a block of code that runs the program, irrelevant to my question;
ods tagsets.excelxp close;
RUN;
%END;
%MEND loop;
%loop;
我已经尝试了很多变体,但每次我总是收到一条错误消息,类似于“错误:文件名 DAILYRET 没有逻辑分配”。
有什么方法可以做到这一点,这样我就不必在 "file=" 行中加上物理引号并能够更新年份?
非常感谢!
-天使
【问题讨论】:
-
DATA 步的目的是什么?此外,您似乎在数据步骤的中间混入了很多全局语句(ODS、OPTIONS)。
-
DATA 步骤的目的是将连接的字符串分配给变量“dailyret”,这样我就可以将变量“dailyret”分配给文件名。我尝试直接将“catx(STRIP(&year1), '''/h1/usr11/angeli/finland/haz/phreg_dailyret_', '.csv''')” 分配给文件名,但它给了我一个错误出色地。老实说,由于我对 SAS 还很陌生,所以我不确定 ODS 和 OPTIONS 到底是做什么的,但是当我搜索如何创建一个 Excel 文件时,这就是我找到的代码。有什么办法可以更新 MACRO 变量 year1 并将其分配给文件名?
-
对于这个简单的问题,只需将宏变量引用放置在您想要的位置。对于更复杂的问题,您可能会运行数据 null 步骤来生成宏变量(使用 CALL SYMPUTX() 函数),然后您可以在数据步骤结束后使用该宏变量来生成其他代码,例如 ODS声明。
-
你有什么版本的 SAS?我注意到一个 CSV 扩展名,您要创建什么类型的 excel 文件,一个数据文件或一个包含表格和报告以及多个工作表的文件?如果只是 CSV 文件,请考虑 proc export。
-
@Tom 我不太明白你说将宏变量引用放在我想要的位置是什么意思。