解释Proc Sql中发生了什么

时间:2016-01-25 13:29:56

标签: sas proc-sql

 select Name into :Dataset1-:Dataset%trim(%left(&DatasetNum)) from MEM;

我无法解释此声明中发生的事情,任何人都可以给我一个解释。 我理解这个例子

select count(Name) into :DatasetNum from MEM

但不是上述那个。

2 个答案:

答案 0 :(得分:3)

它试图使用宏变量DATASETNUM的值作为SELECT语句创建的宏变量名的上限。因为先前的变量是使用前导空格创建的,所以调用%LEFT()宏来删除它们。不需要调用宏%trim(),因为尾随空格不会造成任何麻烦。

首先构建宏变量数组然后从自动宏变量SQLOBS的值设置计数器变量要容易得多。此外,它不会有领先的空白。

select name into :Dataset1- from mem ;
%let DatasetNum=&sqlobs;

如果您的旧版本的SAS不支持新的:varname-语法,那么只需使用较大的值作为上限。 SAS只会创建所需的宏变量数。

select name into :Dataset1-:Dataset99999 from mem;

答案 1 :(得分:1)

这是创建一个SAS宏变量数组(DATASET1,DATASET2,DATASET3)等,从MEM数据集的Name列填充。

与以下类似:

data _null_;
  set MEM;
  call symputx(cats('Dataset',_n_),Name);
run;