请教论坛里的大佬们,我想要创建一系列的新变量,拿创建其中一个新变量举例:
data abc_2;
set abc_1;
if PR99_2018 =1 and PR99_2019 =1 then PR99_1_2018=1;
if PR99_2018 =2 or PR99_2019 =2 then PR99_1_2018=2;
run;
根据以上式子,我创建了以下循环的码:
%MACRO DO_BRANCH;
data abc_2;
set abc_1;
%DO I = 2015 %TO 2018;
%DO Z = 2016 %TO 2019;
if [url=]PR99_&I[/url] =1 and [url=]PR99_&Z[/url] =1 then [url=]PR99_1_&[/url]I=1;
if PR99_&I =2 or PR99_&Z =2 then PR99_1_&I=2;
run;
%END;
%END;
%MEND [url=]DO_BRANCH;[/url]
%DO_BRANCH;
这个代码在Log出现了以下报错:
NOTE: Line generated by the invoked macro “DO_BRANCH”.
5 if PR99_&I =1 and PR99_&Z =1 then PR99_1_&I=1; if PR99_&I =2 or PR99_&Z =2 then PR99_1_&I=2;
180
ERROR: 180-322: Statement is not valid or it is used out of propre order.
NOTE: Line generated by the invoked macro “DO_BRANCH”.
5 if PR99_&I =2 or PR99_&Z =2 then PR99_1_&I=2; if PR99_&I =2 or PR99_&Z =2 then PR99_1_&I=2;
180
ERROR: 180-322: Statement is not valid or it is used out of propre order.
.
.
.
(以上报错一直重复到最后)
于是我又调整了一下:
%MACRO DO_BRANCH;%DO I = 2015 %TO 2018;
%DO Z = 2016 %TO 2019;data abc_2;
set abc_1;
if PR99_&I =1 and PR99_&Z =1 then PR99_1_&I=1;
if PR99_&I =2 or PR99_&Z =2 then PR99_1_&I=2;
run;
%END;
%END;
%MEND DO_BRANCH;
%DO_BRANCH;
倒是不报错了,但是在新的abc_2中的变量列表里只存在一个新变量PR99_1_2018,而且这个新变量只包含2一个值。我怀疑调换顺序后,每次循环的新变量会覆盖掉原来的变量。
所以想请问一下我这个循环的码存在什么问题?应该如何解决?或者有大佬知道有没有更好的方案写这个循环的?感谢!!!(出100论坛币跪求大佬解决ORZ)



雷达卡


京公网安备 11010802022788号







