楼主: js4624331
6301 1

SAS求教retain变量赋值 [推广有奖]

  • 0关注
  • 0粉丝

大专生

50%

还不是VIP/贵宾

-

威望
0
论坛币
855 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
4288 点
帖子
32
精华
0
在线时间
59 小时
注册时间
2011-6-30
最后登录
2022-12-20

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教大家,在同一张数据表中retain语句等如何实现下面逻辑关系.如何用SAS实现即:
end1 用户A/B的A列观测数;
end2 用户A/B的B列观测数;
if first.id then do;
for i = 1 to end1
   for j = 1 to end2
   /*如果这里A列的变量值小于等于B列的变量观测值时*/
        if A(i)<=B(j) then do 提取出A_date存放在result_A,B_date存放在result_B中;
        /*否则按照j变量循环直到满足条件跳出,然后在按照变量i循环*/
   end;
end;
多谢各位高手了哈~
期望结果如下:结果是result_A和result_B列
ID

A_date

A

B_date

B

result_A

result_B

A

2011/1/1

10

2011/1/1

10

2011/1/1

2011/1/1

A

2011/2/1

20

2011/2/3

20

2011/2/1

2011/2/3

A

2011/3/1

40

2011/3/6

30

2011/3/1

2011/4/20

A

2011/4/1

40

2011/4/20

50

2011/4/1

2011/4/20

A

2011/5/1

50

2011/5/23

60

2011/5/1

2011/5/23

A

2011/6/1

60

2011/7/10

70

2011/6/1

2011/7/10

A

2011/7/1

70

2011/8/11

80

2011/7/1

2011/8/11

A

2011/8/1

80

2011/8/1

2011/8/11

B

2010/3/4

100

2010/3/3

100

2010/3/4

2010/3/3

B

2010/4/4

200

2010/4/3

100

2010/4/4

2010/5/3

B

2010/5/4

300

2010/5/3

300

2010/5/4

2010/5/3

B

2010/6/4

400

2010/8/2

400

2010/6/4

2010/8/2

B

2010/7/4

500

2010/8/9

500

2010/7/4

2010/8/9

B

2010/8/4

600

2010/9/1

600

2010/8/4

2010/9/1




二维码

扫码加我 拉你入群

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

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

关键词:RETAIN ETA RET First Then 数据表 如何 用户

沙发
yongyitian 发表于 2013-3-19 07:11:03 |只看作者 |坛友微信交流群
Try this.

data a;
infile datalines missover;
input ID $ A_date : $10. A  B_date : $10. B;
datalines;
A 2011/1/1 10 2011/1/1         10       
A 2011/2/1 20 2011/2/3         20
A 2011/3/1 40 2011/3/6         30
A 2011/4/1 40 2011/4/20 50
A 2011/5/1 50 2011/5/23 60
A 2011/6/1 60 2011/7/10 70
A 2011/7/1 70 2011/8/11 80
A 2011/8/1 80
B 2010/3/4 100 2010/3/3 100
B 2010/4/4 200 2010/4/3 100
B 2010/5/4 300 2010/5/3 300
B 2010/6/4 400 2010/8/2 400
B 2010/7/4 500 2010/8/9 500
B 2010/8/4 600 2010/9/1 600
; run;

proc sort data=a; by id A_date; run;

data b;
    set a;
        if A <= B then do;    /* the condition */
              result_A=A_date;
              result_B=b_date;
                    end;
           else result_A = A_date;
       if missing(b_date) then Result_B=a_date;
       by id;
run;

proc sort data=b;
     by id descending a_date; /* reverse the order */
run;

data c;           /* fill the missing value */
   set b;
   lag_Result_b = lag(result_b);
   if missing(result_b) then result_b=lag_result_b;
   drop lag_result_b;
run;

proc sort data=c out=result;   /* back to normal */
    by id a_date;
run;

proc print data=result; title 'result'; run;

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-1 17:26