2

我正在尝试以下代码:

proc IML;
do i=1 to 20;  
[some codes to execute]  
data[i];  
end;  
QUIT;

所以我希望在完成 do 循环后获得 20 个数据集。SAS有可能吗?我可以使用来做到这一点,但我不喜欢在内部使用宏PROC IML

提前致谢。

4

2 回答 2

4

如果您有 SAS/IML 12.1,它于 2012 年 8 月作为 SAS 9.3m2 的一部分发布,那么您只需将每个数据集的名称括在括号中,如下所示

proc iml;
names = "Data1":"Data20";
do i = 1 to ncol(names);
   x = i;
   dsname = names[i];   /* construct each name */
   create (dsname) from x;
   append from x;
   close (dsname);
end;

有关完整的程序和说明,请参阅文章“读取由名称数组指定的数据集”中的最后一个示例。

于 2015-03-30T10:06:17.880 回答
3

是的,使用CALL EXECUTE模块内部的子程序。

proc iml;
file LOG;

output = (1:10)`;

/*This is how you create a data set from a matrix*/
create outdata from output;
append from output;
close outdata;

/*This module will create 1 data set for each variable in OUTPUT*/
start loopit;
do i=1 to 10;
    x = output[i];
    /*build the string you want to execute*/
    outStr = 'create outdata' + catt(i) + " from x; append from x; close outdata" + catt(i) + ";";
    put outStr; /*Print the string to the log*/

    /*Execute the string*/
    call execute(outStr);
end;
finish loopit;

/*Call the module*/
call loopit;

quit;
于 2015-03-29T21:47:46.317 回答