1

我正在尝试将数据文件分解为小文件,其中一个变量作为这些文件名称的一部分。具体来说,我有一堆人口普查区,以及其他变量。我正在将它们读入矩阵,执行一些操作,现在想将数据导出循环并将其保存为外部数据文件,其中人口普查作为名称的一部分;当我进入下一个区域时,必须在不中断循环或退出 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 中使用 data null,这会破坏流程。

4

2 回答 2

0

在 SAS/IML 12.1 中,您可以将 USE 和 CREATE 语句与在运行时计算的参数一起使用

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

于 2013-08-08T02:07:05.013 回答
0

我不知道 IML 中的解决方案(或者即使有),但我会建议一个不同的解决方案。

将所有矩阵写入单个数据集(通过将它们全部附加在一起或在循环进行时附加到单个数据集,以更容易者为准),并将“人口普查区”作为该数据集中的一个变量附加。然后使用 sas datastep 将它们写出到单独的文件中。如果您正在讨论写入单独的 sas 数据集,您可以使用条件逻辑,也可以创建宏调用来执行此操作;如果您正在编写外部文件,例如 CSV 或文本文件,您可以使用文件名变量(语句filevar中的选项file)并以这种方式写出。

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

于 2013-08-05T20:06:17.020 回答