从SAS PROC IML中循环内部的变量生成文件名



我正试图将数据文件分解为小文件,其中一个变量作为这些文件名称的一部分。具体来说,我有一堆人口普查区,还有其他变量。我正在将它们读取到矩阵中,执行一些操作,现在想将数据从循环中导出,并将其保存为外部数据文件,人口普查区作为名称的一部分;这必须在不打破循环或退出IML的情况下完成,因为我正在进入下一个声道:

read i = first census tract;
append data from other matrix;
save out file as "rld_'census_tract' value";
read next census tract;
repeat;

我尝试了symput函数,但它需要在IML中使用数据null,这会中断流。

我不知道IML中的解决方案(甚至不知道是否有),但我建议使用不同的解决方案。

将所有矩阵写入一个数据集(可以将它们全部附加在一起,也可以在循环进行时附加到一个数据集中,以更容易的为准),并将"普查区"作为一个变量附加到该数据集中。然后使用sas数据步将它们写入单独的文件。如果你谈论的是编写单独的sas数据集,你可以使用条件逻辑,也可以创建一个宏调用来实现这一点;如果要编写CSV或文本文件等外部文件,则可以使用文件名变量(file语句中的filevar选项)并以这种方式编写。

这将是相当有效的(特别是对于外部文件方法),并且不需要停留在IML中。

在SAS/IML 12.1中,您可以将use和CREATE语句与运行时评估的参数一起使用。

如果尚未升级到SAS/IML 12.1,可以使用CALL SYMPUT和SYMGET函数来填充和检索宏变量。这些函数在IML语言中工作:不需要使用DATANULL。请参阅我关于IML中的宏和循环的文章。

最新更新