楼主: kakakarine
902 7

[问答] 请教求助!!SAS %DO %TO 循环找问题 [已解决] [推广有奖]

  • 0关注
  • 0粉丝

小学生

78%

还不是VIP/贵宾

-

威望
0
论坛币
882 个
通用积分
0.0203
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
89 点
帖子
6
精华
0
在线时间
6 小时
注册时间
2019-6-5
最后登录
2023-1-18

楼主
kakakarine 发表于 2022-10-20 10:52:44 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

请教论坛里的大佬们,我想要创建一系列的新变量,拿创建其中一个新变量举例:

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)

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:statement generated Statemen generate branch

沙发
kakakarine 发表于 2022-10-20 11:03:08
不好意思各位,报错部分的下划线和180都是显示在If下面,第一段显示在第一个If,第二段显示在第二个If。

藤椅
kakakarine 发表于 2022-10-22 22:49:37
通过别的方式解决了这个问题啦:

%MACRO DO_ABC;   
%DO I = 2015 %TO 2018;
%LET J=%EVAL(&I+1);
data ABC;
set ABC;
if PR99_&I = 1 and PR99_&J = 1 then PR99_1_&I = 1 ;
if PR99_&I = 2 or PR99_&J = 2 then PR99_1_&I = 2;
run;  
%END;
%MEND DO_ABC;  

%DO_ABC;

板凳
sha-qing 发表于 2022-10-30 11:47:01
第一个代码多了一个run,相当于do循环没有end就结束了,后面的两个end没起作用,删掉run就可以了。
第二个代码是data外面套了一个do循环,会在程序运行时产生了很多个data abc_2,但你没有output,所以只输出最后一次循环产生的数据集,按理说这样做是错的。

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-24 15:02