SAS数据整理的16个技巧
1、修改属性 attrib
2、根据条件删除记录 if 条件 then delete;
3、分拆数据集 data master missing;
merge old new(in=x);
by id;
if x=0 then output missing;
else output master;
run;
4、利用attrib删去所有label
data want;set have;attrib _all_ label=""; run; 5、keep 保留变量
data abc;set ad;keep name label;run;
6、drop 删除变量
data abc;set ad;drop name label;run;
merge old new(in=x);
by id;
if x=0 then output missing;
else output master;
run;
4、利用attrib删去所有label
data want;set have;attrib _all_ label=""; run; 5、keep 保留变量
data abc;set ad;keep name label;run;
6、drop 删除变量
data abc;set ad;drop name label;run;
7、Missing(),如果变量有缺失值,则返回真。如 data test_miss; set learn.blood; if missing(Gender) then MissGender + 1; if missing(WBC) then MissWBC + 1; if missing(RBC) then MissWBC + 1; if Chol lt 200 and not missing(Chol) then Level = 'Low '; else if Chol ge 200 then Level = 'High'; run; 当变量名形如x1-x5,可以调用missing(of x1-x5).此种写法也可用于诸如sum等函数。 8、Ranuni.返回0到1的随机数。若以0作为种子,SAS将以系统时间作为种子产生随机数。 9、Lag返回前一个观测值的函数。看下面的代码 data look_back; input Time Temperature; Prev_temp = lag(Temperature); Two_back = lag2(Temperature); datalines; 1 60 2 62 3 65 4 70 ; 得到结果为 Listing of LOOK_BACK Prev_ Obs Time Temperature temp Two_back 1 1 60 . . 2 2 62 60 . 3 3 65 62 60 4 4 70 65 62 lag返回前一个观测值,lag2将返回往前数两个的观测值,不是指两个观测值。呵呵。lag的一般作用为计算两个变量的差值。将上例略微修改一下,计算两天的温度差。 data diff; input Time Temperature; Diff_temp = Temperature – lag(Temperature); datalines; 1 60 2 62 字符串函数title作用3 65 4 70 ; 当然更直接的用法是用Diff函数。 data diff; input Time Temperature; Diff_temp = dif(Temperature); datalin
es; 1 60 2 62 3 65 4 70 ; 10.Compbl:将字符串中两个或两个以上的空格删除只剩一个空格(即 compress blank)。Compress删除空格或指定的字符。 假设有一个名为电话号码的变量,由于其来源的不同,导致格式多样。 Phone (908)232-4856 210.343.4757 (516) 343 - 9293 9342342345 现在想去掉左右括号,点号和-号。 data phone; length PhoneNumber $ 10; set learn.phone; PhoneNumber = compress(Phone,' ()-.'); drop Phone; run; compress的参数称为修饰语(modifier),各个修饰语的意思如下 d 删除数字 a 删除大小写字符 i 忽略大小写 k 保留字符串 s 删除空格,制表符等 p 删除标点符号 例如 函数 作用 返回值 compress(String,,'a')删除所有字符串 123 compress(String,,'kd')删除除数字外的其它字符 123 compress(String,'wxyz','i')忽略大小写删除 wxyz 123 compress("A?B C99",,'pd')删除标点符号和数字 AB C 11、连接字符串。||或者!!将连接两个字符串为一个字符串,其长度等于两个字符串长度之和。比方说one=ABC,two=DEF,则one||Two将返回ABCDEF. CAT函数等同于||,除了返回的字符串的长度以外,其缺省值是200.Cats函数在连接字符串前去掉字符串前面和后面的空格。Catx类似于Cats,在去掉前后的空格后,会在连接的两字符串中间插入分隔符。下述代码为其例子。 ti
tle "Demonstrating the Concatenation Functions"; data _null_; Length Join Name1–Name4 $ 15; First = 'Ron '; Last = 'Cody '; Join = ':' || First || ':'; Name1 = First || Last; Name2 = cat(First,Last); Name3 = cats(First,Last); Name4 = catx(' ',First,Last); file print; put Join= / Name1= / Name2= / Name3= / Name4= /; run; 输出结果 Demonstrating the Concatenation Functions Join=:Ron : Name1=Ron Cody Name2=Ron Cody Name3=RonCody Name4=Ron Cody 12、Find函数。其语法形式如下 find(string, find-string, modifiers, starting-position) 13、字符串拆分函数Scan.
Scan函数提出以空格或标点符号隔开的第n个单词。不同于trim,trim只是提取字符。
【功能】从字符表达式s中搜取给定的n个单词
【类别】 字符函数
【语法】
1. Scan(s,n) n为正数时,从字符s末尾提取n个字符
2. Scan(s,n) n为负数时,从字符s开始提取n个字符
3. SCAN (s,n<,list-of-delimiters>)
Scan函数提出以空格或标点符号隔开的第n个单词。不同于trim,trim只是提取字符。
【功能】从字符表达式s中搜取给定的n个单词
【类别】 字符函数
【语法】
1. Scan(s,n) n为正数时,从字符s末尾提取n个字符
2. Scan(s,n) n为负数时,从字符s开始提取n个字符
3. SCAN (s,n<,list-of-delimiters>)
【注意】
1. 如果缺失指定的生成变量的长度,系统默认长度为200.
2. 如果|n|=0或大于字符s的长度,则该函数返回空格。
【例子】
data a;
arg='ABC.DEF(X=Y)';
word=scan(arg,3);
put word;
run;
data b;
arg='ABC.DEF(X=Y)';
word=scan(arg,-3);
put word;
run;
1. 如果缺失指定的生成变量的长度,系统默认长度为200.
2. 如果|n|=0或大于字符s的长度,则该函数返回空格。
【例子】
data a;
arg='ABC.DEF(X=Y)';
word=scan(arg,3);
put word;
run;
data b;
arg='ABC.DEF(X=Y)';
word=scan(arg,-3);
put word;
run;
data c;
arg='ABC.DEF(X=Y)';
word=scan(arg,-20);
put word;
run;
data d;
input Arr $ & 22.;
ArrivalGate=scan(Arr,1,' ');
DepartureGate = scan(Arr,2,' ');
put DepartureGate ArrivalGate arr;
cards;
Arrival DepartureGates;
run;
14、比较字符串函数Compare
15、模糊匹配函数Spedis.例如 data fuzzy; input Name $20.; Value = spedis(Name,'Friedman'); datalines; Friedman Freedman Xriedman Freidman Friedmann Alfred FRIEDMAN ; 返回结果如下 Listing of FUZZY Name Value Friedman 0 Freedman 12 Xriedman 25 Freidman 6 Friedmann 3 Alfred 100 FRIEDMAN 87 当两个字符串完全匹配时,将返回0.第一个字符匹配错误,将比其它字符匹配错误所得的处罚分数更大。
16、字符串替换 函数Translate会替换某个字符,而Transwrd会替换某个单词。例如 data trans; input Answer : $5.; Answer = translate(Answer,'ABCDE','12345'); datalines; 14325 AB123 51492 ; 得到结果如下 Answer ADCBE ABABC EAD9B Tranwrd经常用于标准化地址等,如以Street替换St.,以Road替换Rd.,等等。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论