将缺失值替换为同一数据集中的非缺失值

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 分组

将 pandas 列中的值替换为缺失键的默认值

ARFF (Weka) 中的缺失值

Pyspark Dataframe Imputations - 根据指定条件用列平均值替换未知和缺失值

pandas使用replace函数将所有的无穷大值np.inf替换为缺失值np.nan使用pandas的fillna函数用经验固定值填充缺失值np.nan

通过从 pandas 和 scikit-learn 中的非缺失值估计方程来估算缺失值