SAS数据整理的16个技巧
1、修改属性   attrib 
2、根据条件删除记录   if 条件 then delete
3、分拆数据集 data master missing 
merge old newin=x); 
by id 
if x=0 then output missing
else output master 
run 
4、利用attrib删去所有label 
data wantset haveattrib _all_ label="" run 5keep 保留变量
data abcset adkeep name labelrun 
6drop 删除变量
data abcset addrop name labelrun 
  7Missing(),如果变量有缺失值,则返回真。如   data test_miss   set learn.blood   if missingGender then MissGender + 1   if missingWBC then MissWBC + 1   if missingRBC then MissWBC + 1   if Chol lt 200 and not missingChol then   Level = 'Low '   else if Chol ge 200 then Level = 'High'   run   当变量名形如x1-x5,可以调用missingof x1-x5.此种写法也可用于诸如sum等函数。 8Ranuni.返回01的随机数。若以0作为种子,SAS将以系统时间作为种子产生随机数。 9Lag返回前一个观测值的函数。看下面的代码   data look_back   input Time Temperature   Prev_temp = lagTemperature);   Two_back = lag2Temperature);   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 – lagTemperature);   datalines   1 60   2 62   字符串函数title作用3 65   4 70   ;   当然更直接的用法是用Diff函数。   data diff   input Time Temperature   Diff_temp = difTemperature);   datalin
es   1 60   2 62   3 65   4 70   ; 10.Compbl:将字符串中两个或两个以上的空格删除只剩一个空格(即 compress blank)。Compress删除空格或指定的字符。   假设有一个名为电话号码的变量,由于其来源的不同,导致格式多样。   Phone   (908232-4856   210.343.4757   (516 343 - 9293   9342342345   现在想去掉左右括号,点号和-号。   data phone   length PhoneNumber $ 10   set learn.phone   PhoneNumber = compressPhone' ()-.');   drop Phone   run   compress的参数称为修饰语(modifier),各个修饰语的意思如下   d   删除数字   a   删除大小写字符   i   忽略大小写   k   保留字符串   s   删除空格,制表符等   p   删除标点符号   例如   函数   作用   返回值   compressString,,'a')删除所有字符串   123   compressString,,'kd')删除除数字外的其它字符   123   compressString'wxyz''i')忽略大小写删除 wxyz   123   compress"AB C99",,'pd')删除标点符号和数字   AB C 11、连接字符串。||或者!!将连接两个字符串为一个字符串,其长度等于两个字符串长度之和。比方说one=ABCtwo=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 = catFirstLast);   Name3 = catsFirstLast);   Name4 = catx' 'FirstLast);   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 12Find函数。其语法形式如下   findstring find-string modifiers starting-position 13、字符串拆分函数Scan.
Scan函数提出以空格或标点符号隔开的第n个单词。不同于trimtrim只是提取字符。
【功能】从字符表达式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;


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 = spedisName'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 = translateAnswer'ABCDE''12345');   datalines   14325   AB123   51492   ;   得到结果如下   Answer   ADCBE   ABABC   EAD9B   Tranwrd经常用于标准化地址等,如以Street替换St.,以Road替换Rd.,等等。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。