楼主: 寂风
2323 4

一个关于SAS 数据清理的问题 [推广有奖]

  • 0关注
  • 0粉丝

小学生

7%

还不是VIP/贵宾

-

威望
0
论坛币
320 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
20 点
帖子
1
精华
0
在线时间
7 小时
注册时间
2005-5-19
最后登录
2017-4-12

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 ...
关键词:数据清理 Procedure Table ABLE ROCE 清理

回帖推荐

wang1839 发表于4楼  查看完整内容

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 ...
沙发
wang1839 在职认证  发表于 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;

使用道具

藤椅
xingyy0926 发表于 2016-9-29 01:18:11 |只看作者 |坛友微信交流群
学习了

使用道具

板凳
wwang111 发表于 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;

使用道具

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

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

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

GMT+8, 2024-4-30 20:12