全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2648 4
2016-09-29
悬赏 100 个论坛币 已解决
  

  

Table A

  

  

Emp Id

Ev1

Ev2

Ev3

Ev4

Ev5

Ev6

1001

   

AB

   
   

AT

   
   

BTR

   
   

S

   
   

XYZ

   

AT

1001

   

AT

   
   

MY

   
   

LOV

   
   

.

   
   

LOV

   

LOV

1001

   

.

   
   

MY

   
   

.

   
   

S

   
   

MY

   

S

1001

   

AB

   
   

BTR

   
   

LOV

   
   

BTR

   
   

AT

   

AT

1001

   

AT

   
   

LOV

   
   

KUL

   
   

MY

   
   

.

   

S

1002

   

MY

   
   

LOV

   
   

.

   
   

AT

   
   

AT

   

BTR

1002

   

MY

   
   

AT

   
   

BTR

   
   

.

   
   

AT

   

MY

1003

   

BTR

   
   

MY

   
   

.

   
   

XYZ

   
   

MY

   

MY

1003

   

.

   
   

MY

   
   

MY

   
   

MY

   
   

MY

   

BTR

1003

   

BTR

   
   

AB

   
   

MY

   
   

.

   
   

BTR

   

.

1004

   

S

   
   

.

   
   

MY

   
   

MY

   
   

.

   

XYZ

1004

   

XYZ

   
   

AT

   
   

KUL

   
   

AB

   
   

KUL

   

S

1004

   

.

   
   

.

   
   

BTR

   
   

LOV

   
   

MY

   

MY

1004

MY

KUL

AT

KUL

XYZ

AB

  

  

Table B

  

  
   

Ev

N

AB

3

AT

3

BTR

4

S

2

XYZ

3

MY

4

LOV

3

KUL

2

  

  

  


A表上面的emp id代表的是每个病人的编号,EV1,2,3,4,5,6代表的是某6个时间,里面的数据字母表示某种事件,要统计每种不同事件对应的病人数量,如B表所示。
可以用一般的SAS procedure或者SQL 来写。
我会把数据变成长数据,像这样: QQ图片20160928125332.png
然而还是不知道接下来应该怎么办,有大神能够帮忙解答下吗?






最佳答案

wang1839 查看完整内容

data emp; infile datalines missover ; length ev1-ev6 $5; input empid EV1 $ EV2 $ EV3 $ EV4 $ EV5 $ EV6 $ ; cards; 1001 AB AT BTR S XYZ AT 1001 AT MY LOV . LOV LOV 1001 . MY . S MY S 1001 AB BTR LOV BTR AT AT 1001 AT LOV KUL MY . S 1002 MY LOV . AT AT BTR 1002 MY AT BTR . AT MY 1003 BTR MY ...
二维码

扫码加我 拉你入群

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

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

全部回复
2016-9-29 00:53:41
data emp;
infile datalines missover ;
length ev1-ev6 $5;
input empid EV1 $  EV2 $ EV3 $ EV4 $ EV5 $  EV6 $ ;
        cards;
1001        AB                 AT                  BTR                   S                 XYZ                 AT
1001        AT                 MY                  LOV                   .                 LOV                 LOV
1001        .                 MY                  .                   S                 MY                 S
1001        AB                 BTR                  LOV                   BTR                 AT                 AT
1001        AT                 LOV                  KUL                   MY                 .                 S
1002        MY                 LOV                  .                   AT                 AT                 BTR
1002        MY                 AT                  BTR                   .                 AT                 MY
1003        BTR                 MY                  .                   XYZ                 MY                 MY
1003        .                 MY                  MY                   MY                 MY                 BTR
1003        BTR                 AB                  MY                   .                 BTR                 .
1004        S                 .                  MY                   MY                 .                 XYZ
1004        XYZ                 AT                  KUL                   AB                 KUL                 S
1004        .                 .                  BTR                   LOV                 MY                 MY
1004        MY            KUL            AT            KUL           XYZ            AB
;
run;          

data emp1;
        set emp;
        order=_n_;
run;



proc transpose data=emp1 out=tr prefix=col;
by order empid;
var ev1-ev6;
run;


proc sql;
        create table final as select count(unique(empid)) as n,col1 from tr where col1>"" group by col1;
run;
二维码

扫码加我 拉你入群

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

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

2016-9-29 01:18:11
学习了
二维码

扫码加我 拉你入群

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

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

2016-9-29 09:54:28
%let lib=WORK; /* Assume your data in WORK library, if not, please change this value (need upcase) */
data _null_;
set sashelp.vcolumn end=last;
where libname="&lib" and memname="A" and upcase(name)=:"EV";
if _n_=1 then call execute("data a1;set a(keep=empid "||strip(name)||" rename=("||strip(name)||"=ev))");
else call execute("a(keep=empid "||strip(name)||" rename=("||strip(name)||"=ev))");
if last then call execute(";run;");
run;
proc sql;
create table b as
select ev, count(distinct empid) as n
from a1
where ev ne ''
group by ev;
quit;

二维码

扫码加我 拉你入群

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

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

2016-9-29 11:10:13
data test;
  input empid ev1 $ ev2 $ ev3 $ ev4 $ ev5 $ ev6 $;
  datalines;
  1001 ab at etr s xyz at
  1001 at my lov at lov lov
  1001 my my s my s s
  1002 my lov s at at btr
  1003 btr ab my s btr my
  1004 s my my my btr xyz
  ;
run;

proc transpose data=test out=test1(drop=ev1 rename=(_name_=ev col1=value));
  by empid ev1;
  var ev1-ev6;
run;

proc sort data=test1 nodupkey out=result;by ev empid;run;

proc freq data=result;
  table value/out=result1(drop=percent rename=(count=N));
run;
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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