我希望你能帮助我在SAS的任务。我有一个数据集(2乘2的数字),我想提取每个条目,并将它们单独存储为宏变量供以后使用。我不是很熟悉宏,所以我不确定这是否可能。
非常感谢您的建议!
如果你在问题中包含你的数据就很有帮助了。
我在这个例子中使用了一些随机值:
* create some sample data;
data testdata;
input a b;
datalines;
2.1 3.2
4.6 7.0
;
run;
* use CALL SYMPUT in a DATA step to assign the values to macro variables;
data _null_;
set testdata;
call symputx(catx('_','variable_a',_n_), a);
call symputx(catx('_','variable_b',_n_), b);
run;
* view the macro variables values;
%put &=variable_a_1;
%put &=variable_a_2;
%put &=variable_b_1;
%put &=variable_b_2;
call symputx()
是此处的相关语句。它的第一个参数是要赋值的宏变量的名称。第二个参数是要分配给该变量的值。
我使用自动变量_n_
来避免重复变量名。这里left()
函数的使用避免了变量名和值中出现空格。
您可以在DATA Step中使用SYMPUTX
例程。
的例子:
data have;
input p q @@;
datalines;
1 2 3 4
;
data _null_;
set have;
array cols p q;
do index = 1 to dim(cols);
symbol_name = catx('_','A',_n_,index);
putlog 'NOTE: ' symbol_name=;
call symputx(symbol_name, cols(index));
end;
run;
options nosource;
%put NOTE: &=A_1_1;
%put NOTE: &=A_1_2;
%put NOTE: &=A_2_1;
%put NOTE: &=A_2_2;
options source;
将生成如下
所示的日志条目
NOTE: symbol_name=A_1_1
NOTE: symbol_name=A_1_2
NOTE: symbol_name=A_2_1
NOTE: symbol_name=A_2_2
NOTE: There were 2 observations read from the data set WORK.HAVE.
NOTE: DATA statement used (Total process time):
real time 0.00 seconds
cpu time 0.00 seconds
104
105 options nosource;
NOTE: A_1_1=1
NOTE: A_1_2=2
NOTE: A_2_1=3
NOTE: A_2_2=4