2

如何将名称为词干+后缀的 SAS 数据集读入 IML?词干作为 SAS 宏变量给出,我打算使用的足够内容是在 IML 中的字符串向量中。

在 RI 中会使用

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-loop 中(并且我在循环名称时需要这个), call symput 并没有真正起作用。在这里我找到了 symget,但是在使用 &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;

我仍然不觉得这是一个人应该工作的方式。

4

2 回答 2

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;
于 2013-07-18T13:46:35.870 回答
0

如果您有 SAS/IML 12.1,只需使用字符串连接来构造数据集名称,然后在名称周围加上括号,如博文“读取数组中指定的数据集”中所述。

尝试在循环中使用宏变量时要小心。请参阅文章“ SAS/IML 语言中的宏和循环”中的提示

于 2013-07-29T10:41:42.490 回答