全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 SAS专版
2939 0
2012-03-09
hi all,我写的这个程序是关于观测合并的,举例如下:
table中有三个变量,eterm是不良事件的soc和pt分级,当soc为一分类,其后的group1 和group2都是空值;pt为二级分类,当group1 和group2都是空值的时候说明存在换行,我写的程序就是将多个换行字符串连接成一个观测;不过这段程序是针对最多换四行的情况,如果有更多换行(比如10行),就要再catx里再加变量;各位如果有更简洁的方法,不受换行数的限制,欢迎分享!
data table;
input eterm $35. group1 $15. group2 $15. ;
cards;
RESPIRATORY, THORACIC AND
MEDIASTINAL DISORDERS
  Total Pts With at Least one AE                      12 ( 13)          6 (  6)
  PLEURAL EFFUSION                                       5 (  5)          3 (  3)
  BRONCHIAL OBSTRUCTION disorder                 -                2 (  2)  
  BRONCHOSPASM                  
  HAEMOPTYSIS                                                1 (  1)          -      
  ASTHMA                                                           -                1 ( <1)
  BULLOUS LUNG DISEASE                                 1 (  1)          -      
  CHRONIC OBSTRUCTIVE PULMONARY               -                1 ( <1)
  DISEASE ACUTE PULMONARY OEDEMA
  DYSPHONIA OBSTRUCTIVE AIRWAYS
  DISORDER                     
  EPISTAXIS                                                       -                -      
METABOLISM AND NUTRITION
  Total Pts With at Least one AE                      9 (  9)          6 (  6)  
  HYPOKALAEMIA                                           6 (  6)          1 ( <1)  
  HYPERGLYCAEMIA                                        2 (  2)          3 (  3)  
  
  ;
  run;
data table;
set table;
if group1 NE '' & group2 NE '' then space=1;
else if eterm='' then space=.;
else space=0;
id=_n_;
run;
proc sql noprint;
select count(1) into: num1
from table
where space=0;
select count(1) into: num2
from table;
select id into: l1-:l%left(&num1)
from table
where space=0;
select eterm into: v1-:v%left(&num2)
from table;
quit;
%macro union;
data table;
set table;
dspace=space-lag(space);
dd=space+dspace;
%do i=1 %to &num1;
%let c1=%eval(&i. +1);
%let c2=%eval(&i. +2);
%let c3=%eval(&i. +3);
%let u1=%eval(&&l&i. +1);
%let u2=%eval(&&l&i. +2);
%let u3=%eval(&&l&i. +3);
%let j=%eval(&&l&i. -1);
%let z=%eval(&&l&i.);
%let v0=;
%let q1=%eval(&num1+1);
%let l&q1.=;
%let q2=%eval(&num1+2);
%let l&q2.=;
%let q3=%eval(&num1+3);
%let l&q3.=;
if id=&j & space^=. & %eval(&&l&c1.- &&l&i.)^=1 then a=catx('',"&&v&j.","&&v&z.");
if id=&j & %eval(&&l&c1.- &&l&i.)=1  then a=catx('',"&&v&j.","&&v&z.","&&v&u1.");
if id=&j & %eval(&&l&c2.- &&l&i.)=2  then a=catx('',"&&v&j.","&&v&z.","&&v&u1.","&&v&u2.");
if id=&j & %eval(&&l&c3.- &&l&i.)=3  then a=catx('',"&&v&j.","&&v&z.","&&v&u1.","&&v&u2.","&&v&u3.");
if space=. | dd^=. & dd<=0 then a='';
if dd^=. & dd<=0 | a^='' then eterm='';
%end;
union=catx('',eterm,a);
drop dspace  id1 dd a space eterm;
run;
%mend;
%union;
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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