如何在IML中读取名称为stem + suffix的SAS数据集?词干是作为一个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我找到了symget,但在使用环境中,&amp; stem.symget('suffix')并不富有成效。
还有其他想法吗?
编辑:我发现了以下相当不优雅的解决方案:
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;
我仍然觉得这不应该是人们的工作方式。
答案 0 :(得分:1)
我能想到的最简单的方法是使用一些非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;
答案 1 :(得分:0)
如果您有SAS / IML 12.1,只需使用字符串连接来构造数据集名称,然后在名称周围加上括号,如博客文章“Read data sets that are specified in an array”中所述。
尝试在循环中使用宏变量时要小心。请参阅文章“Macros and loops in the SAS/IML language”
中的提示