0
proc iml;
use rdata3;
read all var _all_ into pp;
close rdata3;
do i = 1 to 1050;
    perms = allperm(pp[i, ]);
    create pp&i from perms[colname= {"Best" "NA1" "NA2" "Worst"}];
    append from perms;
    close pp&i;
end;

我想通过 do 循环使用上述代码在 SAS 中创建多个数据集。但是,我似乎无法使用 &i 指示器更改每个数据集的名称。谁能帮我更改代码以允许我创建多个数据集?或者,关于如何通过循环从矩阵创建多个数据集,还有其他选择吗?提前致谢。

4

1 回答 1

2

您不想使用宏变量您想使用 IML 的功能。但是,您将创建大量数据集。

data rdata3;
   x = 1;
   y = 2;
   a = 4;
   b = 5;
   output;
   output;
   run;
proc iml;
   use rdata3;
   read all var _all_ into pp;
   close rdata3;
   do i = 1 to nrow(pp);
      outname = cats('pp',putn(i,'z5.'));
      perms = allperm(pp[i, ]);
      create (outname) from perms[colname= {"Best" "NA1" "NA2" "Worst"}];
      append from perms;
      close (outname);
      end;
   quit;

您可以将 ID 变量添加到 PERMS 并将所有版本的 PERMS 附加到一个数据集中。我不确定我使用了最好的 IML 技术,我知道 IML 足够危险。

proc iml;
   use rdata3;
   read all var _all_ into pp;
   close rdata3;
   perms = j(1,5,0);
   create PP_out from perms[colname= {'ID' "Best" "NA1" "NA2" "Worst"}];
   do i = 1 to nrow(pp);
      perms = allperm(pp[i, ]);
      perms = j(nrow(perms),1,i)||perms;
      append from perms;
      end;
   close PP_out;
   quit;
于 2016-12-23T15:55:53.257 回答