SAS-使用';选择进入';它由其他宏变量组成
谁能帮帮我吗。 我有下面的代码。它不会产生错误,但同时也没有达到我想要的效果。 其目的是使用“Select into”跨多个列为每个单元格创建宏变量。我认为问题在于“选择进入”也包含宏变量SAS-使用';选择进入';它由其他宏变量组成,sas,Sas,谁能帮帮我吗。 我有下面的代码。它不会产生错误,但同时也没有达到我想要的效果。 其目的是使用“Select into”跨多个列为每个单元格创建宏变量。我认为问题在于“选择进入”也包含宏变量 %macro ld_macrovar; proc sql noprint; select count(portfolio) into :a from split_D; %do i=1 %to &max_comb.; /*already defined elsewhere -
%macro ld_macrovar;
proc sql noprint;
select count(portfolio)
into :a
from split_D;
%do i=1 %to &max_comb.; /*already defined elsewhere -actual value=2 */
select _&i.LGD
into :_&i.LGD1 - :_&i.LGD%left(&a)
from split_D;
%end;
quit;
%mend;
%ld_macrovar;
谢谢您的宏变量被分配到宏的本地范围。因此,如果要在宏之外访问它们,必须手动将它们分配到全局范围。这可以通过使用来实现。或者,您可以执行需要宏内的宏变量的处理 您可以通过运行来检查变量的范围
您还可以通过在语句(在SAS 9.3及更高版本中或在其他版本中,
以“
分隔)中添加第一个选项,避免将%left
与&a
一起使用
警告:如果您计划使用这些值进行进一步分析,或者有很多行,那么可能会有更好的方法来实现您想要的结果。宏变量仅存储文本,存储值时可能会丢失某些精度。一般来说,最好使用数据集来移动/操作数据和宏变量,以便在需要对代码进行参数化时使用。应该可以。当您打开mprint
选项(options-mprint;
)时,日志中会出现什么内容?
%macro ld_macrovar(max_comb);
proc sql noprint;
select count(*) into :rows
from split_D;
quit;
%do i = 1 %to &max_comb.;
%do j = 1 %to &rows.;
%global _&i.LGD&j.;
%end;
%end;
proc sql noprint;
%do i = 1 %to &max_comb.;
select _&i.LGD
into :_&i.LGD1 -
from split_D;
%end;
quit;
%mend;
/* Dummy data */
data split_D;
do i = 1 to 10;
_1LGD = i**2;
_2LGD = exp(i);
output;
end;
run;
%ld_macrovar(2);
/* Print out all the user defined macro variables */
%put _USER_;