将缺失值替换为同一数据集中的非缺失值
Posted
技术标签:
【中文标题】将缺失值替换为同一数据集中的非缺失值【英文标题】:Replacing Missing Value with non-missing in the same dataset 【发布时间】:2017-02-15 06:25:16 【问题描述】:我对以下问题有疑问。我的数据如下所示:
State Total
AZ 1000
AZ 1000
AZ -
CA -
CA 4000
也就是说,对于某些观察,我缺少变量“total”的数据。我想用非缺失观测值的总数替换缺失值。
期望的输出
enter code here
State Total
AZ 1000
AZ 1000
AZ **1000**
CA **4000**
CA 4000
有什么想法吗?
【问题讨论】:
【参考方案1】:如果您的值是常量,请使用 PROC STANDARDIZE 替换缺失值。
Proc stdize data=have out=want missing=mean reponly;
By state;
Var amount;
Run;
【讨论】:
小注:replace和reponly都是不允许的。删除替换,这很好用。【参考方案2】:这是我想出的解决方案。当然有更优雅的方法可以做到这一点,但这已经过测试并且有效。
想法是对数据进行排序,以便缺失值在正确的值之后。然后循环每个状态。保存第一次观察中的“总”值,并将其应用于状态中任何缺失的单元格。
data begin;
length state $3 total 5;
input state Total;
cards;
AZ 1000 @@
AZ 1000 @@
AZ @@
CA @@
CA 4000 @@
OZ @@
OZ 3000 @@
OZ @@
;
run;
proc sort data=begin; by state descending total ; run;
data Filled;
set begin;
by state; /*Handle each state as own subset*/
retain memory; /*Keeps the 'memory' from prior observations and not from column */
if first.state then memory=total; /*Save the value to temporary column*/
if total=. then total=memory; /*Fill blanks*/
drop memory; /*Cleanup*/
run;
【讨论】:
【参考方案3】:用均值归并。
proc sql;
select a.state,coalesce(a.total,b.total) from have a left join (select distinct state,mean(total) as total from have group by state) b on a.state=b.state;
quit;
【讨论】:
以上是关于将缺失值替换为同一数据集中的非缺失值的主要内容,如果未能解决你的问题,请参考以下文章
用之前的非缺失值填充缺失的 pandas 数据,按 key 分组
Pyspark Dataframe Imputations - 根据指定条件用列平均值替换未知和缺失值
pandas使用replace函数将所有的无穷大值np.inf替换为缺失值np.nan使用pandas的fillna函数用经验固定值填充缺失值np.nan