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

来源:互联网 发布:e=mc2知乎 编辑:程序博客网 时间:2024/05/22 00:49

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/2和a(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求一下中位数,如果是整数则可以使用中位数填补法,方法同上,如果不是则使用众数填补法

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

原创粉丝点击