SAS函数

作者: 寒微123 | 来源:发表于2018-05-31 10:29 被阅读0次

    ="'"&A2&"'"&","
    %sysexec md "P:\EC\data_summary&month" & exit;新建文件夹
    切断函数:
    Round:返回四舍五入后的数值。
    Ceil:返回大于等于该值的最小整数。
    floor:取小于等于该值的最大整数。
    Int:返回整数部分
    随机函数:
    Ranuni(seed):产生服从均匀分布的随机数
    RANNOR(seed) :产生服从正态分布的随机数

    a. call symput('group_time',group_time); /申明变量/

    b. %let date='16feb2018'd; /申明变量/

    c. options validvarname=any;/可以显示中文/

    d. proc datasets lib=work kill memtype=data nolist;quit;
    /清空work库中的信息/

    e. proc options option=encoding;run;/编码,识别中文名/

    f. options compress=yes;/压缩数据/

    g. %let start=%sysfunc(time());
    /运行程序的时间,调用内置函数time(),赋值给start,并将其声明为变量start/

    1. group_time=intnx("week",today(),0); /group_time:取上礼拜天时间/
      注意它总是返回一个周期的开始值。INTNX(interval,start-from, increment)
      INTNX(interval,from,n) 计算从from开始经过n个interval间隔后的SAS日期。其中interval 可以取'YEAR'、'QTR'、'MONTH'、'WEEK'、'DAY'等。比如,INTNX('MONTH', '16Dec1997'd, 3)结果为1998年3月1日。注意它总是返回一个周期的开始值。

    2. date_temp=put(&date,yymmddn8.); /数值格式转换为字符型20180422/

    3. temp=catx('',sort1,sort2);
      /*catx:去掉首尾全部空格,并且在字符串之间加上一个指定的字符串
      */
      compress函数:删除字符串中所有空格

    4. var=scan(fname,1,'.');/表示从字串fname中以.为分隔符提取第1个字符串/

    (一)字符转换:
    1)字符型转换成数值型/日期
    Numvar=INPUT(source,informat)
    Source为字符,informat为输入格式。
    2)数值型转换成字符型/日期
    Chavar=PUT(source,format)
    Source可以是字符/数值,fromat为输出格式,put返回字符串。
    (二)字符型变量的处理
    1)提取字符串
    substr('string',start,length)
    scan('string',i,'char') char是分隔符,默认为空格;i是取第几部分
    2)替换字符串
    translate('string','to_string',‘from_string’)
    upcase()得到字符串大写
    low()得到字符串小写
    MD5加密
    data chk1;
    y = put(md5('abc'),hex32.);/*十六进制*/ z = put(md5('access method'),binary32.);/二进制/
    put y= ;
    put z= ;
    run;
    3)字符串长度
    length()从最右边非空格到最左边,包括空格
    4)查找字符串的函数
    kindex(string1,string2);在string1中搜索string2,返回string2出现的位置;
    kindex(string1,string2)>0即可说明string1中含有string2。
    find(string,substring<,modifier,startpos>)
    返回的是子字符串在字符串中首次出现的位置,<>中表示可以省略,其中startpos表示开始查找的位置
    5)删除字符变量中的部分内容
    compress('string','char','modifier')
    char是要删掉的内容,char默认为空格;modifier若为d,则去除字符串中数字,a则去除字母
    6)去除字符型变量中的空格
    trim()去除尾部空格,left()将字符串首部空格移到尾部,strip()去除首尾两部的字符
    7)合并字符串变量
    !! || cat()
    (三)数值型变量的处理
    round(argumet,<round-off-unit>)按照四舍五入保留到round-off-unit位
    ceil,floor分别向上和向下取整数,INT取整数部分。
    (四)日期函数
    year(date)/month(date)/weekday(date) 一周内的第几天/mdy(month,day,year) SAS日期值
    例如date=20120123,存储的是距离1960.1.1的日期值,date_year=int(date/10000),将其当做数据型处理

    /***************proc******************/
    1、append 过程
    proc append base=null data=temp; run;
    /将temp数据集的观测添加到null数据集后面/
    2、sort 过程
    proc sort data=temp nodupkey out=temp1; by x; run;
    /temp根据by值进行排序;nodupkey:删除重复by值对应的观测;noduprecs删除重复观测值;by语句可指定多个变量,默认升序排序,可使用descending进行降序排序,注descending在降序变量前/
    /***************************************/
    /*****************hash对象********************/
    data lb.&brand._profile;/hash对象中find方法/
    if N=0 then set lap.Counter(keep=Counter_ID Counter_Name Counter_City);
    if N=1 then do;
    declare hash h(dataset:"lap.Counter");
    h.definekey("Counter_ID");/唯一键/
    h.definedata("Counter_Name","Counter_City");
    h.definedone();
    end;
    set lb.&brand._profile;
    if h.find() ne 0 then do;
    Counter_Name="";
    Counter_City="";
    end;
    run;
    /通过hash表的find方法,再读入一条观测后,使用find方法将得到与当前观测key值相等的记录;
    如果没有找到匹配的记录,则将Counter_Name和Counter_City值定义为空
    /

    /***********将productlist匹进trans表中***********/
    data lb.Kiehl_trans;
    if 0 then set kie.productlist(keep=product_id new_cat new_product_name);
    if n = 1 then do;
    declare hash hashLookup(dataset:'kie.productlist');
    hashLookup.definekey('product_id');
    hashLookup.definedata('new_cat','new_product_name');
    hashLookup.definedone();
    end;
    set lb.Kiehl_trans;
    if hashLookup.find() ne 0 then do;
    new_cat='';
    new_product_name='';
    end;
    run;
    /****************************************************/
    /*********计算两时间相差年、季度、月、周、天*******/
    data ab;
    Format x date9. Y date9.;
    X='14feb1991'd;Y='21jan2013'd;
    year=Intck('year',x,y);
    qtr=Intck('qtr',x,y);
    month=Intck('month',x,y);
    week=Intck('week',x,y);
    day=Intck('day',x,y);
    /put year= qtr= month= week= day=;/
    run;

    /****************************** 转置******************************/
    PROC TRANSPOSE DATA=newcatbycnt out=newcatbycnt1(drop=NAME);
    BY CustomerID; /列不变/
    ID newcat; /newcat变为行/
    VAR fag; /fag值/
    run;

    /**********PROC suveryselect 过程实现各种抽样***********/
    其一般形式是:
    PROC SURVEYSELECT
    data=<源数据集名>
    method = <srs l urs l sys >
    out=<抽取样本存放的数据集>
    n=<抽取数量>(or samprate=抽样比例)
    seed =n;
    strata <指定分层变量>;
    id <指定抽取的样本所保留的源数据集变量>;
    run;
    说明:method用来指定随机抽样方法的,其中SRS是指不放回简单随机抽样(Simple Random Samping);urs是指放回简单随机抽样(Unrestricted Random Sampling);sys是指系统抽样(Systematic Sampling)。
    seed用来指定随机种子数,为非负整数,取0则每次抽取的样本不同,若取大于0的整数,则下次抽样时若输入相同值即可得到相同的样本;
    id是指定从源数据集复制到样本数据集的变量,若缺省,则复制所有变量。

    例子:
    a、简单无重复随机抽样举例:
    /按30%的比例从test数据集中抽取样本,并把样本输出到results数据集中/
    proc surveyselect data=test1 out=results1 method=srs samprate=0.3;
    run;
    b、分层等比例随机抽样举例;
    proc sort data=test2;
    by 分层变量;
    run; /先用分层变量对总体样本进行排序/
    proc surveyselect data=test2 out=results2 method=srs samprate=0.1;
    strata 分层变量;
    run; /
    根据分层变量等比例从总体中抽取样本
    /
    c、分层不等比例抽样举例;
    (1)手工设置抽样比例或者抽样数
    proc sort data=test3;
    by 分层变量;
    run; /先用分层变量对总体样本进行排序/
    proc surveyselect data=test3 out=results3 method=srs
    samprate=(0.1,0.3,0.5,0.2); /
    根据分层情况设置每一层要抽取的比例
    /
    strata 分层变量;
    run; /根据分层变量不等比例从总体中抽取样本/
    proc surveyselect data=test3 out=results3 method=srs
    n=(30,20,50,40); /根据分层情况设置每一层要抽取的样本数/
    strata 分层变量;
    run;
    (2)根据抽样表进行不等比例抽样
    proc sort data=test3;
    by 分层变量;
    run; /先用分层变量对总体样本进行排序/
    proc surveyselect data=test3 out=results3 method=SRS
    samprate=samp_table; /
    通过抽样比例数据集进行抽样,samp_table数据集中要包括分层变量 以及每一分层对应的抽样比例或者数量,如果按比例抽样变量必须用rate来命名抽样比例,如果是按数量抽样必须用nsize来命名抽样数量
    /
    strata 分层变量;
    run;

    相关文章

      网友评论

          本文标题:SAS函数

          本文链接:https://www.haomeiwen.com/subject/nxofsftx.html