zoukankan      html  css  js  c++  java
  • 《SAS编程与数据挖掘商业案例》学习笔记之十二

    本次重点在:sas数据集管理   

    主要包含:包含数据集纵向拼接、转置、排序、比較、复制、重命名、删除等

    1.append语句

    注:base数据集和data两个数据集必须结构一样。避免使用force的情况,反复append的会造成反复。

    一个避免反复的商业化应用:

    %macro dl;

    %if %sysfunc(exist(null)) ne 0 %then %do;

    proc datasets lib=work nolist;

    delete null;

    quit;

    %end;

    proc append base=null data=sashelp.class;run;

    %mend dl;

    %dl;

    假设数据集null存在,则进行删除,否则直接append

     

    还有一个使用的样例;

    data _null_;

    x=today();

    format x yymmdd10.;

    call symput('data_month',put(intnx("month",x,0),yymmn6.));

    run;

    %put &data_month;

    data a;

    input month$ var;

    cards;

    200908 10

    200909 20

    200910 30

    200911 40

    ;

    data b;

    input  month$ var;

    cards;

    200911 400

    ;

    data a;

    modify a;

    if month="&data_month" then remove;

    run;

    proc append base=a data=b;run;

    第一部分:获取当前月

    第二部分:删除当前月数据

    第三部分:append到数据a

    当中第二部分能够用下面两个语句替代,可是效率最高的是remove。效率最低的是sql

    data a;

    set a;

    if month="&data_month" then delete;

    run;

     

    proc sql;

    delete from a

    where month="&data_month";

    quit;

     

    2.sort语句

    经常使用选项:

    nodupkey:删除反复by值相应的观測

    noduprecs:删除反复观測值

    Descending 一定要放在降序排序的变量前。

    Eg:

    data a;

    input x y @@;

    cards;

    1 20 1 10 1 30 2 40 2 50

    ;

    run;

    proc sort data=a nodupkey; by x;run;

    仅仅取排序变量的每个by组的第一条观測值

    上述代码也能够用下面取代:

    proc sort data=a ; by x;run;

    data b;

    set a;

    by x;

    if first.x;

    run;

    返回每个by组里面y最小的。

    proc sort data=a; by x y;run;

    proc sort data=a nodupkey; by x;run;

    也能够用data步完毕:

    proc sort data=a; by x y;run;

    data b;

    set a;

    by x y;

    if first.x;

    run;

     

    注:假设使用了nodupkey选项。最好使用out=选项,否则原有数据集会被删除掉一部分。

    对于多个字符变量须要sort的情况下,sort前先用catt之类的字符拼接函数拼接全部须要sort的字符变量。

    并最好使用out=选项。

    data a;

    length cat $100;

    input x1$ x2$ x3$ y;

    cat=catt(of x1-x3);

    cards;

    a1 b1 c1 1

    a2 b2 c2 2

    ;

    run;

    proc sort data=a out=b;

    by cat;

    run;

    下面代码也能够运行,可是效率低

    proc sort data=a out=b;

    by x1-x3;

    run;

     

    proc sort data=a ;

    by x1-x3;

    run;

     

    3.转置transpose过程

    proc transpose data= chapt6.score out= chapt6.idnumber name=test prefix=sn;

    id studentid;

    idlabel student;

    run;

    注:转置的变量为全部的数值型变量,包含test1test2final

    对于默认的变量名用studentid取代,并加入前缀sn

    对于默认的转之前变量名列转置后的列名_name_改为test

    转置后的变量添加student

     

    eg

    proc transpose data= chapt6.fishdata

       out= chapt6.fishlength(rename=(col1=measurement));

       var length1-length4;

       by location date;

    run;

    by组中的4个变量length1-length4进行转置。系统每读取一条by观測。转置后将产生4条观測

    data chapt6.fishlength2;

    set chapt6.fishdata(keep=location date length1-length4);

    array tr[1:4] length1-length4;

    do i=1 to 4;

    measurement=tr(i);

    output;

    end;

    keep location date measurement;

    run;

    通过data语句实现上面的转置过程

    proc transpose data= chapt6.fishlength

       out= chapt6.fishdata2;

       var measurement;

       by location date;

    id _name_;

    run;

    列转成行

    data chapt6.fishdata3;

    do i=1 to 4;

    set chapt6.fishlength(keep=location date measurement);

    array tr[1:4] length1-length4;

    tr(i)=measurement;

    end;

    keep location date length1-length4;

    run;

    通过data步骤实现列转成行

    4.datasets过程

    sashelp

  • 相关阅读:
    JDBC的一些代码
    mysql
    【转载】如何简单地理解Python中的if __name__ == '__main__'
    【转载】用Scikit-Learn构建K-近邻算法,分类MNIST数据集
    数据科学入门---可视化数据
    Sum It Up
    Blue Jeans
    Zball in Tina Town
    Island Transport
    CD
  • 原文地址:https://www.cnblogs.com/llguanli/p/7210553.html
Copyright © 2011-2022 走看看