1706 5

请教一个SAS编程问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

66%

还不是VIP/贵宾

-

威望
0
论坛币
528 个
通用积分
9.7458
学术水平
3 点
热心指数
0 点
信用等级
0 点
经验
4458 点
帖子
44
精华
0
在线时间
148 小时
注册时间
2011-4-2
最后登录
2017-12-10

楼主
龙在云霄柳在岸 发表于 2014-11-6 11:11:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

问题是这样:


The dataset below contains enrollment records for students. Write code to count the numberof days each student was enrolled. Include both the start date and the end datein the count. Beware of overlapping date ranges. As an example student 1’s count should be 6.



data Enrollment;

      informatStart_Date MMDDYY10.End_Date MMDDYY10.;

      formatStart_Date MMDDYY10.End_Date MMDDYY10.;

      infiledatalines dlm=',';

      inputStudent_Id Start_Date End_Date;

      datalines;

      1,8/20/2012,8/23/2012

      1,8/21/2012,8/25/2012

      2,8/20/2012,8/22/2012

      2,8/24/2012,8/25/2012

      3,8/20/2012,8/23/2012

      4,8/22/2012,8/23/2012

      3,8/22/2012,8/23/2012

      4,8/23/2012,8/24/2012

      3,8/24/2012,8/24/2012

run;


因为时间段有overlap,所以不知道如何进行计算?向各位大牛请教一下!


二维码

扫码加我 拉你入群

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

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

关键词:sas编程问题 SAS编程 Overlapping enrollment informat example records should count start

本帖被以下文库推荐

沙发
jlss426 发表于 2014-11-6 11:25:38

藤椅
wwang111 发表于 2014-11-6 11:33:26
proc sort data=enrollment out=test;
by student_id start_date end_date;
run;

data wanted;
set test;
by student_id start_date end_date;
dur=end_date-start_date+1;
lagend=lag(end_date);
format lagend mmddyy10.;
if student_id ne lag(student_id) then call missing(lagend);
if ^missing(lagend) and lagend>=start_date-1 then dur=end_date-lagend;
if first.student_id then enrolled_days=dur;
else enrolled_days+dur;
if last.student_id;
keep student_id enrolled_days;
run;

板凳
龙在云霄柳在岸 发表于 2014-11-6 12:09:41
wwang111 发表于 2014-11-6 11:33
proc sort data=enrollment out=test;
by student_id start_date end_date;
run;
好迅速!膜拜一下,能否简单解释一下原理?尤其是从“if^missing(lagend)”开始不太明白是怎么回事了,谢谢!

报纸
wwang111 发表于 2014-11-6 12:59:01
这一步就是判断一下在同一个ID之内,本条记录的end date与下一条记录的start date是否重叠,如果重叠就减去重叠的天数, 后面的first. 开始就是把每个id每条记录的天数相加

地板
龙在云霄柳在岸 发表于 2014-11-6 22:24:43
wwang111 发表于 2014-11-6 12:59
这一步就是判断一下在同一个ID之内,本条记录的end date与下一条记录的start date是否重叠,如果重叠就减去 ...
好的多谢多谢!!!

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

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