全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
1619 8
2021-05-23

原始数据Servedt有三列,ID,Begain date,End date(黄色区域)。 表示某ID在20197月至2020年6月一年间某医疗服务的开始日和终止日,所以ID是有重复的,代表不同的医疗服务开始日期和终止日期。


想转换成新的格式Servedt_sp(绿色区域),ID列和 日期列(2019年7月至2020年6月),如果ID在某月有医疗服务,就显示1,没有就显示0,这样我就可以知道在某个月是否这个ID有服务,而且我也可以计算某个月有多少ID用了服务。




用SAS怎么转换呢?试了两天,写不出来。


请看附件图片。谢谢大神

原始数据转换后
ID

Begain date

End date

ID

07/2019

08/2019

09/2019

10/2019

11/2019

12/2019

01/2020

02/2020

03/2020

04/2020

05/2020

06/2020

1000356

7/2/2019

12/12/2019

1000356

1

1

1

1

1

1

1

1

1

1

0

0

1000356

1/13/2020

1/31/2020

1004934

0

1

1

1

1

1

0

0

0

1

1

1

1000356

2/1/2020

3/1/2020

1005787

0

0

0

0

0

0

0

0

0

0

1

1

1000356

3/14/2020

4/20/2020

1112404

0

0

1

1

1

1

1

1

1

0

0

0

1004934

8/15/2019

12/5/2019

2585554

1

1

1

1

1

1

1

1

1

1

1

1

1004934

4/5/2020

6/30/2020

2354541

1

1

1

1

1

1

1

1

1

1

1

0

1005787

5/6/2020

5/29/2020

1005787

6/7/2020

6/30/2020

1112404

9/25/2019

12/8/2019

1112404

12/9/2019

1/25/2020

1112404

2/1/2020

3/31/2020

2585554

7/1/2019

6/15/2020

2354541

7/5/2019

11/25/2019

2354541

12/11/2019

12/30/2019

2354541

1/1/2020

5/30/2020

附件列表
download.png

原图尺寸 48.05 KB

download.png

二维码

扫码加我 拉你入群

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

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

全部回复
2021-5-24 10:56:45
大牛们呢?
二维码

扫码加我 拉你入群

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

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

2021-8-11 18:06:51
jiaqitang11 发表于 2021-5-24 10:56
大牛们呢?
解决了吗?
二维码

扫码加我 拉你入群

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

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

2021-8-23 21:34:58
没呀,不会呀
二维码

扫码加我 拉你入群

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

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

2021-9-29 15:55:10
PROC IMPORT OUT=sheet1
    DATAFILE= "C:\Users\wang\Desktop\data.xlsx"
    DBMS=EXCEL  REPLACE;
    GETNAMES=YES;
        SHEET="sheet1";
RUN;

proc sql;
        create table s as select min(Begin_date) as min , max(End_date) as max from sheet1;
quit;

data s1;
set s;
ys=year(min);
ms=month(min);
ye=year(max);
me=month(max);
m=(ye-ys)*12+me-ms;
output;
do i=1 to m;
ms+1;
output;
end;
run;

data s2;
set s1 (keep= ys ms);
format stdate enddate date9.;
if ms>12 & mod(ms,12)^=0 then do;
ys=ys+int(ms/12);
ms=mod(ms,12);
end;
else if ms>12 & mod(ms,12)=0 then do;
ys=ys+int(ms/12)-1;
ms=12;
end;
stdate=mdy(ms,1,ys);
if ms<10 then m='0'||put(ms,best.);else m=put(ms,best.);
yymm=put(ys,best.)||m;
enddate=intnx('month',input(compress(yymm),yymmn6.),0,'end');
keep ys ms stdate enddate;
run;


data s3;
set  sheet1;
do i=1 to all;
set s2 point=i nobs=all;
if   Begin_date <=stdate<=End_date |  Begin_date <=enddate<=End_date
then s=1 ;else s=0;
output;
end;
run;

data s4;
        set s3(keep=id Begin_date End_date ys ms s);
        if ms<10 then ym=catx('-','0'||ms,ys);else ym=catx('-',ms,ys);
        ym=compress(ym);
        drop ys ms;
run;

proc sort data=s4;
        by id Begin_date  End_date;
run;


proc transpose data=s4  out=final(drop=_name_) name=_name_ prefix=s;
        by id Begin_date  End_date;
        id ym;
        var s;
run;


  PROC EXPORT DATA= final
            OUTFILE= "d:\final.XLSX"
            DBMS=excel REPLACE;
                        SHEET="sheet1";
RUN;
二维码

扫码加我 拉你入群

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

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

2021-12-10 06:42:14
才看到,谢谢老师。
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群