SAS 学习

SAS读取数据的规则是遇到空格时默认该数据读取完毕,除非是指定了数据宽度时,则以宽度值来确定数据;冒号的作用是告诉SAS,如果要读取下一个变量,需要满足下面任一条件:要么遇到空格,要么变量的宽度读完了。

data fh;
input city $18. zone $;
cards;
山东省蓬莱市 0536
山东省威海市乳山市 0532
;
proc print;
run;

data fh;
input city :$18. zone $;
cards;
山东省蓬莱市 0536
山东省威海市乳山市 0532
;
proc print;
run;

使用if_then语句创建新变量

data lx;
input id lx$;
lx1 = lx in ("有效","显效","痊愈");
if lx in ("有效","显效","痊愈") then lx2 = "有效";else lx2 = "无效";
datalines;
1 显效
2 有效
3 无效
4 痊愈
;
proc print;
run;

retain 语句

data a1;
retain a 0; /告诉SAS a 的初始值,以便a = a+1表达式使用/
a = a+1;
input wt ht;
datalines;
60 170
55 166
73 162
;
proc print;
run;

do循环语句

do 变量=初始值 to 最终值 <by 增加量>
SAS语句
end

  • do i = 1 to 10;
  • do i = 1 to 10 by 2;

data fh;
do count = 1 to 5;
input time;
output;
end;
datalines;
23
29
49
64
87
;
proc print;
run;

SAS中有一个规则:字符串变量的长度是由第一个遇到的值的长度决定的,而且字符变量一旦产生,他的长度就无法改变。

data age;
do id = 1 to 4;
input birth:yymmdd10. death:yymmdd10.;
age = (death - birth)/365;
if age < 60 then age1 = 50;
else if age < 70 then age1 = 60;
else age1 = 70;
format birth death yymmdd10.;
output;
end;
datalines;
1954-12-06 2014-02-03
1938-02-18 2014-01-17
1947-07-10 2014-01-11
1943-08-21 2014-03-03
;
run;

SAS 函数应用技巧

image.png

与字符有关的函数

image.png

image.png

例子:身份证倒数第二位表示性别,奇数为男,偶数为女。
data iden;
input iden:$18.;
if length(iden) = 18 then gen = substrn(iden,17,1);
else gen = substrn(iden,15,1);
if mod(gen,2) = 1 then gender = "男";
else gender = "女";
datalines;
34082319920902371X
360533801215792
360533198208254533
360533851009226
;
proc print;
run;
新版身份证号为18位,老版的则为16位。
image.png

这两个函数在查找多个字符的时候有很大差异:对于多个字符的查找,find必须是所有字符都完全匹配才算找到,而findc只要找到字符中的任意一个就算找到。
data book;
input book: & $100.;
sas = find(book,'sas','i');
if sas >0 then class = 'SAS书';
else class = '其他书';
datalines;
Survival Analysis Using SAS
MATLAB 程序设计
SPSS数据分析
SAS应用分析
The Little SAS book
;
proc print;
run;

data computer;
input type$@@;
alpha = anyalpha(type);
digit = anydigit(type);
xh = substrn(type,alpha,digit-alpha);
bh = substrn(type,digit,length(type)-digit+1);
datalines;
TP340 KB320 B3519 C560 H430 LLL
;
proc print;
run;


image.png

data lx;
input id lx$;
lx1 = tranwrd(lx,"显效","有效");
lx1 = tranwrd(lx1,"痊愈","有效");
datalines;
1 显效
2 有效
3 无效
4 痊愈
;
proc print;
run;


image.png

data computer;
input type$@@;
xh = compress(type,,'d');
bh = compress(type,,'a');
cards;
TP320 KS230 B3214 HJ234 H324
;
proc print;
run;
image.png

data code;
input prov$ city$ country$;

code1 = cats(prov,city,country);
code2 = catx("-",prov,city,country);
code3 = prov||city||country; /*常规的连接符*/
cards;
37 05 02
37 02 21
37 06 85
;
proc print;
run;

image.png

data cloth;
input pj&:$1000.;
beauty = count(pj,"漂亮");
datalines;
裙子很漂亮,穿起来有仙女的感觉
裙子很喜欢,很漂亮,不知道面料牢固不牢固
裙子很漂亮
裙子很飘逸
面料柔软舒适,很飘逸
很漂亮,超喜欢这颜色
质量一般,没想象中的好
很大方,不足之处是,透气性不是很好
;
proc print;
run;


image.png

与时间和日期有关的函数

image.png

data date;
input year1$ month1$ day1$ year2$ month2$ day2$;
date1 = mdy(month1,day1,year1);
date2 = mdy(month2,day2,year2);
format date1 date2 yymmdd10.;
ydif = yrdif(date1,date2,"actual");
ddif = datdif(date1,date2,"actual");
datalines;
2013 05 21 2014 03 11
2013 03 10 2014 01 22
2013 06 05 2014 05 06
2013 07 07 2014 04 13
;
proc print;
run;


image.png

SAS中有两个函数式专门用于变量类型之间转换的,input函数主要用于把字符型转为数值型,put函数主要用于把数值型转为字符型。

image.png

data date;
input year1$ month1$ day1$ year2$ month2$ day2$;
date1 = catx("/",year1,month1,day1);
date2 = catx("/",year2,month2,day2);
d1 = input(date1,yymmdd10.);
d2 = input(date2,yymmdd10.);
format d1 d2 yymmdd8.;
datalines;
2013 05 21 2014 03 11
2013 03 10 2014 01 22
2013 06 05 2014 05 06
2013 07 07 2014 04 13
;
proc print;
run;

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

推荐阅读更多精彩内容

  • 第二章 将你的数据放入SAS(2.1-2.11) 2.1 将你的数据放入SAS的方法 你可能有各种形式的数据,包括...
    胡阿白阅读 409评论 0 2
  • 在SAS中对数据的处理可分为两大步骤:1.将数据读入SAS建立的SAS数据集,称为数据步;2.调用SAS的模块处理...
    李源源yyL阅读 1,301评论 0 1
  • 2.12 一行有多个观测值的原始文件读取 当一行出现多个观测值时,可以在input语句结尾加一个停止符号@@ 例子...
    胡阿白阅读 563评论 0 1
  • The Little SAS Book 阅读笔记: 第一章 SAS软件入门 1.1 SAS语言 许多软件要么是菜单...
    胡阿白阅读 628评论 1 5
  • 完了,我又闯祸了! 在今天之前我都觉得生活是美好的,可是今晚之后我觉得我的世界已经乌云密布。 夜跑结束想给老爸打一...
    向行阅读 337评论 8 7