从数据集创建宏变量



我希望你能帮助我在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

相关内容

  • 没有找到相关文章

最新更新