SAS函数

="'"&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;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容

  • 1、取上周日日期和rolling12月的日期:data timing;format date1 yymmdd10....
    寒微123阅读 470评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,596评论 18 139
  • 中储运记者/徐翔 相对于很多缺乏技术、缺乏落地能力的无车承运人平台,江苏无锡的真好运可谓是一家技术领先,模式已经验...
    真好运阅读 541评论 0 0
  • 画了一整天,终于画完了,觉得自己在涂的时候只是觉得哪些颜色画在一起好看,但是不知道颜色之间的过渡应该怎么处理,不是...
    naic阅读 385评论 0 2
  • 本题要求实现一个函数,求N个集合元素A[]的中位数,即序列中第[N/2+1]大的元素。其中集合元素的类型为自定义的...
    日常表白结衣阅读 541评论 0 0