Sas 无法访问数据步骤中定义的变量值
我试图定义一个全局“当前年份”变量,我可以用它为数据库中的不同表编制索引。例如,我有以下表格:Sas 无法访问数据步骤中定义的变量值,sas,Sas,我试图定义一个全局“当前年份”变量,我可以用它为数据库中的不同表编制索引。例如,我有以下表格: tb_2016 tb_2017 tb_2018 都具有相同的模式。对于每一年,我希望能够动态引用前几年,而无需硬编码 所以我试着这样做: data _null_; v_curr_year = PUT(TODAY(), YEAR4.); v_last_year = v_curr_year - 1; PUT v_curr_year; PUT v_last_year; ru
tb_2016
tb_2017
tb_2018
都具有相同的模式。对于每一年,我希望能够动态引用前几年,而无需硬编码
所以我试着这样做:
data _null_;
v_curr_year = PUT(TODAY(), YEAR4.);
v_last_year = v_curr_year - 1;
PUT v_curr_year;
PUT v_last_year;
run;
PROC SQL;
SELECT * FROM schema.tb_&v_curr_year.;
QUIT;
正如预期的那样,2018年和2017年的印刷品。但是,当我尝试这一点时:
data _null_;
v_curr_year = PUT(TODAY(), YEAR4.);
v_last_year = v_curr_year - 1;
PUT v_curr_year;
PUT v_last_year;
run;
PROC SQL;
SELECT * FROM schema.tb_&v_curr_year.;
QUIT;
我明白了
如何定义这个v\u curr\u year
变量,以便动态引用这样的年份
我尝试使用
%LET v_last_year=year(INTNX(“year”,sysdate,-1))
失败…如果试图在数据步骤中分配宏变量,则需要使用调用symput()
或调用symputx()
。另外,在数据步骤中使用year
功能可能更容易
data _null_;
v_curr_year = year(today());
v_last_year = v_curr_year - 1;
call symputx('v_curr_year',v_curr_year);
call symputx('v_last_year',v_last_year);
run;
现在,这两个变量已被指定为宏变量
如果要在数据步骤之外执行此操作,可以执行以下操作
%let v_curr_year = %sysfunc(year("&sysdate9"d));
%let v_last_year = %eval(&v_curr_year-1);
您需要使用
%eval
函数在宏语言中执行整数运算,需要使用%sysevalf
执行浮点运算。您需要在宏语言中的大多数函数周围使用%sysfunc()
。