SAS--拼表

Posted super-yb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SAS--拼表相关的知识,希望对你有一定的参考价值。

libname clinic E:sas;
*one to one reading ;
proc sort data=sasuser.admitjune out=work.adsort;
    by id;
run;
proc sort data=sasuser.stresstest out=work.stsort;
    by id;
run;

data work.one_to_one;
    set adsort(keep= id name sex age);
    set stsort(keep=timemin maxhr);
run;

proc print data=one_to_one;
run;

*concatenate;

data concatenate(drop=resthr);
    set sasuser.stress98 sasuser.stress99; *直接拼接,行数=sum旧表行数
                                                      列数<=sum旧表列数,
                                                    变量名一样放一列( type一样,or error);
    if resthr < 72;
run;
proc print data=concatenate;
run;

*interleaving==cbind+sort;
proc sort data=sasuser.stress98 out=work.s98;
    by tolerance;
run;
proc sort data=sasuser.stress99 out=work.s99;
    by tolerance;
run;
data work.interleave;
    set s98 s99;     *拼表顺序:根据by先放第一个表中的单位(放完为止),根据by再放表2中的单位,
                        若表2无,回到表1,按by 的第二个值录入;
    by tolerance;
run;
proc print data=interleave;
run;


*match-merge;
data work.merged;
    merge work.adsort work.stsort; *  旧表已sort   ,跟据by,把ID相同的放在一起,列数=旧表列数和-重复变量名次数;
    by id;      *note:merge在PDV中pointer的顺序;
run;

proc print data=work.merged;
run;

*当merge的两个数据集包含多个相同变量名时,(by只用一个),只能rename,
否则该变量内容被后面数据集的变量值重写;
* (rename=(oldname=newname)); ;

proc print data=sasuser.repertory;
run;
proc print data=sasuser.finance;
run;
proc print data=sasuser.company;
run;

data work.finrep;
   merge sasuser.repertory(rename=(date=daat2))
         sasuser.finance (rename=(name=lastname))
         sasuser.company;
   by ssn;
run;


run;
proc print data=finrep;
run;

*去掉不是共有by后变量 单位;
data work.merged2;   /*merge有22个单位,merge有20个,去掉了ad和str的第一个单位miss和2458*/
    merge work.adsort(in=ina)
          work.stsort(in=ins); 
    by id;      
    if ina and ins;  *既不是0也不是missing,if判断为true是1或者nonmissing;
run;


*drop和keep变量时,注意他们是否在data步使用;
data sasuser.merged;
  merge work.adsort
      (rename=(date=AdmitDate)
      in=inad drop=height weight)
      work.stsort
      (rename=(date=VisitDate)
      in=instr keep=id tolerance date);
   by id;
   if inad and instr;
run;
proc print data=sasuser.merged;
run;

 

以上是关于SAS--拼表的主要内容,如果未能解决你的问题,请参考以下文章

使用文件中的代码作为 SAS 宏变量的内容

伪代码转换为SAS宏代码

解读SAS代码的含义

在sas中定义变量来清理代码

我想将此代码从 SAS 转换为 ECL(HPCC)

卫生统计学 SAS代码复习