我用电话symputx创建宏变量项目1到N项的清单,现在我想这样的数组中的点1获取项目1至它们传输到阵列中的另一个datastep,现货2得到项目2等。
do j=1 to &num_OR;
rulesUsed{j}=&&Item&j;
end;
我读的是双符号语法是引用这样的宏观变量的方式,但我不断收到各种错误。 我敢肯定有解决这个简单的方式,但我是新来的SAS,没有文件我已经通过阅读的来了在搜索中提到的问题,这个确切的类型。
我用电话symputx创建宏变量项目1到N项的清单,现在我想这样的数组中的点1获取项目1至它们传输到阵列中的另一个datastep,现货2得到项目2等。
do j=1 to &num_OR;
rulesUsed{j}=&&Item&j;
end;
我读的是双符号语法是引用这样的宏观变量的方式,但我不断收到各种错误。 我敢肯定有解决这个简单的方式,但我是新来的SAS,没有文件我已经通过阅读的来了在搜索中提到的问题,这个确切的类型。
简短的回答是:不这样做,在一般。 宏变量没有存储数据的好方法,而且几乎总是有一个更好的办法。
但是,如果你需要,你这里的问题是,宏变量不能使用数据步变。
do j=1 to &num_OR;
rulesUsed{j}=&&Item&j;
end;
j
是一个数据变量步骤,而不是一个宏变量,所以它不是&j
。 您需要:
1 -使用symget
检索宏变量。 这是一个数据阶梯函数采用一个正常数据步骤字符参数(这样的变量,一个“”字符串等),并具有该名称返回宏变量。 所以
rulesUsed[j] = symget(cats("item",j));
2 - 使用宏循环来检索宏变量。
%do j = 1 %to &num_or;
rulesUsed[&j.] = &&item&j;
%end;
这两种方法都做工精细。
如果你有一个像下面的数据集:
data have ;
ruleno+1;
input rule $20. ;
cards;
Value1
Value2
Value3
;
你可以将其转换为使用广PROC TRANSPOSE。
proc transpose data=have out=want(drop=_name_) prefix=rulesUsed ;
var rule;
id ruleno;
run;