SAS 一道题目

来源:互联网 发布:自制nas网络存储服务器 编辑:程序博客网 时间:2024/06/05 05:06

SAS code

data a;infile datalines dsd;input id $ var1  var2   var3$  ;datalines;001,1,,001,,2,001,,,a 002,4,,002,,5,002,,,6;run;%macro test(num);    data work.b#        set work.a(keep= id var&num);        if vtype(var&num) = "N" then do;            if var&num ne . then output;        end;        else do;            if var&num ne '' then output;        end;    run;%mend;%test(1)%test(2)%test(3)data work.c;    merge work.b1 work.b2 work.b3;        by id;run;proc print ;run;
id var1 var2 var3 001 1 001 2 001 a 002 4 002 5 002 b

||

id var1 var2 var3 001 1 2 a 002 4 5 b

村花大神SQL代码:

data a;infile datalines dsd;input id $ var1  var2   var3$  ;datalines;001,1,,001,,2,001,,,a 002,4,,002,,5,002,,,6;run;proc sql noprint;  select count(*) into: numn from dictionary.columns  where libname='WORK' AND MEMNAME='A' AND TYPE='num';  select name into: clist sepearted by ',' from dictionary.columns  where libname='WORK' AND MEMNAME='A' AND TYPE='char' and name ne 'id';quit;data b;  format k $20.;  set a;  array va _numeric_;  array vara $ new1-new%left(&numn.);  do i=1 to &numn.;     vara[i]=put(va[i],8.0);  end;  k=coalescec(of vara{*},&clist.);run;proc transpose data=b out=c(drop=_name_);  by id;  var k;run;proc print;run;
0 0
原创粉丝点击