如何将名为stem+suffix的SAS数据集读入IML?词干是作为SAS宏变量给出的,我打算使用的足够内容在IML中的字符串向量中。
在R中,我会使用
suffix<-c('s1','s2')
for (s in suffix){
data<-eval(as.name(paste(stem,s,sep='')))
}如果我有第一个数据集的代码,我就可以进行循环。我试过了:
proc iml;
suffices = {'s1','s2'};
call symput('suffix',suffices[1]);
use &stem.&suffix.;问题是,如果在do循环中(我在循环名称时需要这样做),调用symput并不能真正起作用。我发现了Here,但在使用后缀(‘&stem.symget’)的上下文中并不是很有效。
还有其他想法吗?
编辑:我发现了以下不太优雅的解决方案:
proc iml;
%global suff;
suffix={'s1','s2','s3'};
%do ii = 1 %to 3;
call symput('suff',suffix[&ii.]);
<do stuff based on the suffix>
%end;然而,我不认为这是一个人应该做的事情。
发布于 2013-07-18 21:46:36
我能想到的最简单的方法就是使用一些非IML语法。例如,PROC SQL可以生成宏变量列表。
%let stem=class_;
data class_s1 class_s2;
set sashelp.class;
run;
data suffices;
input suffix $;
datalines;
s1
s2
;;;;
run;
%macro use_suffix(suffix=);
use &stem.&suffix.;
read all into &stem.&suffix.;
print &stem.&suffix.;
%mend use_suffix;
proc sql;
select cats('%use_suffix(suffix=',suffix,')') into :suffixlist separated by ' ' from suffices;
quit;
proc iml;
&suffixlist;
quit;发布于 2013-07-29 18:41:42
如果您有SASIML12.1,只需使用字符串连接来构造数据集名称,然后将名称括起来,如博客文章"Read data sets that are specified in an array“中所述。
在循环中使用宏变量时要小心。请参阅文章"Macros and loops in the SAS/IML language“中的技巧
https://stackoverflow.com/questions/17716726
复制相似问题