在SAS中:当组内缺失值的数量超过非缺失值的数量时,按组标准化值

在SAS中:当组内缺失值的数量超过非缺失值的数量时,按组标准化值,sas,Sas,我希望将变量V2的值标准化为变量V1。我想用组V1中的任何非缺失值替换所有缺失值。非缺失值是标准化的,并且可能在一个组中出现多次 拥有: 想要: 我用过: Proc stdize data=have out=want missing=mean reponly; By V1; Var V2; Run; 虽然这无法通过非缺失值的平均值来填充所有缺失值。许多缺失的值仍然存在 在大多数组中,缺失值比未缺失值多。我认为这可能会使标准化成为不可能 当一个组中的大多数值缺失,但非misng值仍然标准化时,我

我希望将变量
V2
的值标准化为变量
V1
。我想用组V1中的任何非缺失值替换所有缺失值。非缺失值是标准化的,并且可能在一个组中出现多次

拥有:

想要:

我用过:

Proc stdize data=have out=want missing=mean reponly;
By V1;
Var V2;
Run;
虽然这无法通过非缺失值的平均值来填充所有缺失值。许多缺失的值仍然存在

在大多数组中,缺失值比未缺失值多。我认为这可能会使标准化成为不可能


当一个组中的大多数值缺失,但非misng值仍然标准化时,我如何实现预期结果

我会使用双道循环方法:

data want;
  do _n_ = 1 by 1 until(last.v1);
    set have;
    by v1;
    if not(missing(v2)) and missing(fill_value) then fill_value = v2;
  end;
  do _n_ = 1 to _n_;
    set have;
    if missing(v2) then v2 = fill_value;
  end;
  drop fill_value;
run;

你看过SAS日志了吗?你收到这样的留言了吗?警告:变量V2的量表估计器小于或等于0。变量V2将不标准化,并将缺失值分配给其标度估计器。注意:上面的消息是针对以下组的:V1=1I在日志中被提示该消息。您的示例数据显示每个组的所有记录中的v2值相同。这是否反映了您的实际数据结构?是的。每个组的值都是相同的。你的意思是说你想插补缺失的值,这样每个组都有一个“user10712739”分布吗?
Proc stdize data=have out=want missing=mean reponly;
By V1;
Var V2;
Run;
data want;
  do _n_ = 1 by 1 until(last.v1);
    set have;
    by v1;
    if not(missing(v2)) and missing(fill_value) then fill_value = v2;
  end;
  do _n_ = 1 to _n_;
    set have;
    if missing(v2) then v2 = fill_value;
  end;
  drop fill_value;
run;