楼主: wangzai2367
902 4

[程序分享] Retain在SAS循环中不起作用吗? [推广有奖]

  • 2关注
  • 0粉丝

已卖:1份资源

大专生

28%

还不是VIP/贵宾

-

威望
0
论坛币
88 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
458 点
帖子
16
精华
0
在线时间
56 小时
注册时间
2020-1-2
最后登录
2022-5-5

楼主
wangzai2367 在职认证  发表于 2021-12-14 10:18:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

想在数据集后面添加一列行号,可是不管把retain放在循环里面还是循环外面都是不起作用。是不是不可以直接这么写,求各路大神指点一下

subjvisitnumbern行号
001V1

20

3

1

001V2

24

3

2

001V3

18

3

3

002V1

32

2

1

002V2

30

2

2

003V1

40

1

1


data test2;
set test1;
do until(n=0);
retain sn;
n=n-1;
sn=+1;
output;
end;
put _all_;
run;

二维码

扫码加我 拉你入群

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

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

关键词:RETAIN ETA RET Number output

沙发
learsaas 发表于 2021-12-14 20:15:47
  1. proc sort data=test1 out=test2;
  2.         by subj visit;
  3. run;
  4. data test2;
  5.         set test2;
  6.         by subj visit;
  7.         if first.subj then sn=0;
  8.         sn+1;
  9. run;
复制代码

藤椅
reduce_fat 发表于 2021-12-19 19:03:26
你retain 放错地方了吧?

板凳
isabelhuang 发表于 2021-12-29 06:54:35
一般把retain放在set前面

报纸
HXAI102230 在职认证  发表于 2021-12-29 11:10:01
二楼应该是常用的解法吧,照楼主的思路,我觉得需要修改:首先按subjid visit 排序,然后更新如下:


data test2;
set test1;if fisit.subjid then retain sn 0;
do until(n=0);
retain sn;
n=n-1;
sn+1;
if n=0 then output;
end;
put _all_;
run;

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-2-10 08:17