Sas 解释Proc-Sql中发生的事情

Sas 解释Proc-Sql中发生的事情,sas,proc-sql,Sas,Proc Sql,我无法解释这句话中所发生的事情。有人能给我一个解释吗。 我明白这句话 select Name into :Dataset1-:Dataset%trim(%left(&DatasetNum)) from MEM; 但不是上面的那个 这将创建一个SAS宏变量数组(DATASET1、DATASET2、DATASET3)等,这些变量是从MEM数据集的Name列填充的 有必要: select count(Name) into :DatasetNum from MEM 这将创建一个SAS宏变量

我无法解释这句话中所发生的事情。有人能给我一个解释吗。 我明白这句话

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

但不是上面的那个

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

有必要:

select count(Name) into :DatasetNum from MEM

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

有必要:

select count(Name) into :DatasetNum from MEM

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

只需先构建宏变量数组,然后根据自动宏变量SQLOBS的值设置计数器变量,就更容易了。再加上,它将没有前导空格

data _null_;
  set MEM;
  call symputx(cats('Dataset',_n_),Name);
run;
如果旧版本的SAS不支持新的
:varname-
语法,则只需使用较大的上限值即可。SAS将只创建所需数量的宏变量

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

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

只需先构建宏变量数组,然后根据自动宏变量SQLOBS的值设置计数器变量,就更容易了。再加上,它将没有前导空格

data _null_;
  set MEM;
  call symputx(cats('Dataset',_n_),Name);
run;
如果旧版本的SAS不支持新的
:varname-
语法,则只需使用较大的上限值即可。SAS将只创建所需数量的宏变量

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

谢谢您的回答,但是您能解释一下“code”Dataset1-:Dataset%trim(%left(&DatasetNum))“code”的含义吗?根据@Tom的回答,%trim/%left函数去掉空格,以确保语句的解析方式类似于“Dataset1-:DatasetX”,而不是“Dataset1-:Dataset X”(这是一个语法错误)。DatasetNum变量(在本例中)作为正在创建的宏变量数组的上限。谢谢,现在我明白了。我被冒号的鸟巢弄糊涂了。但是现在我明白了,谢谢你的回答,但是你能解释一下“code”Dataset1-:Dataset%trim(%left(&DatasetNum))“code”的含义吗?根据@Tom的回答,%trim/%left函数去掉空格,以确保语句的解析方式类似于“Dataset1-:DatasetX”,而不是“Dataset1-:Dataset X”(这是一个语法错误)。DatasetNum变量(在本例中)作为正在创建的宏变量数组的上限。谢谢,现在我明白了。我被冒号的鸟巢弄糊涂了。但是现在我明白了:varname-syntax在9.4中是新的吗?以前从未见过!很好。我想:varname-syntax在9.4中是新的吗?以前从未见过!美好的