加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用sas过程步proc stdize对缺失值进行填补

(2011-11-28 16:22:45)
标签:

proc

stdize

缺失值填补

sas缺失值填补

杂谈

分类: sas编程

SAS中没有专门的处理缺失值的过程步,但是在标准化变量的过程步中可以实现缺失值的填补。其基本过程如下:

PROC STDIZE DATA=dataset REPONLY METHOD= OUT=outdata  ;  

VAR variables ;

RUN;

其中proc stdize 是调用标准化过程步,data=表示需要进行缺失值填补的数据库,reponly的意思是只取代缺失值(replace missing data only,这个在均数填补法中必须要加上,不然就得不到想要的结果,method=就是选择填补方法,一般在针对计量资料时,我们一般选用均数填补法和中位数填补法(数据符合正态分布时METHOD=mean,偏态分布时选用METHOD=median),在填补计数资料没有什么好的办法,一般也使用中位数填补法,目的是尽量不要出现带小数点的填补项,但是其实使用中位数填补法有可能会产生带小数点的值,那就是当样本量(这里专门指排除缺失值后的样本量)是偶数的时候,打个比方:有一个100例的样本量,缺失2个,那么在这剩下的98个样本量中,中位数=[an/2+ a(n+2)/2]/2,an/2a(n+2)/2不相等时则中位数肯定为带小数的值。当然这种情况其实发生的概率很小,特别是大样本以及分类数很小的时候,万一发生了,者只好使用众数填补,即用出现频率最高的频数来填补,要是使用众数填补则不能使用以上的过程步了,目前没有找到很好的方法,只能使用最笨的方法,即使用proc means 过程步求出众数,然后在记录这个数值,在放到data 步中进行填补。

总结一下:在使用sas(目前我用的是SAS9.2版本)进行均数填补法时,先看数据类型(当然这里只针对数值型数据,字符型在这里不做讨论),如果是计量资料,使用均数填补法,过程如下:

PROC STDIZE DATA=dataset REPONLY METHOD=mean OUT=outdata  ;   

    VAR variables ;

RUN;

dataset改成你要填补的数据库,把outdata改成经过均数填补法填补以后你要保存的数据库名字(如果没有这个语句那么SAS将自动保存,形如data1,data2...),把variables改成你要进行填补的变量。

要是数据类型明显的偏态,则使用中位数填补法,只需把mean改成median就行了。

 

当数据类型是计数资料时,分两种情况:

1.当数据排除缺失之后的观测值为奇数时,使用中位数填补法,方法同上,

2.如果当数据排除缺失之后的观测值为偶数时,可以使用proc means求一下中位数,如果是整数则可以使用中位数填补法,方法同上,如果不是则使用众数填补法

注意以上方法只适合缺失观测不是很多的情况,如果缺失过多,应该对缺失观测单独进行分析,而不能盲目的进行填补,导致结果偏离很大!

参考网页:

http://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_stdize_s

 

  如需更多交流请移步:http://www.beta-stat.com/?page_id=117免费为大家做统计方面的咨询!

http://s13/middle/8baaaca5gc0837cefd0dc&690stdize对缺失值进行填补" TITLE="使用sas过程步proc stdize对缺失值进行填补" />


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有