Replace 将同一数据集中的缺失值替换为非缺失值
我有一个关于以下问题的问题。我有如下数据:Replace 将同一数据集中的缺失值替换为非缺失值,replace,sas,missing-data,Replace,Sas,Missing Data,我有一个关于以下问题的问题。我有如下数据: 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 有什么想法吗?这是我想出的一个解决方案。当然
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
有什么想法吗?这是我想出的一个解决方案。当然有更优雅的方法可以做到这一点,但这是经过测试和工作 其思想是对数据进行排序,以便将丢失的值放在正确的值之后。然后循环遍历每个状态。保存第一次观察的“总计”值,并将其应用于状态中任何缺失的单元格
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;
如果您的值是常量,请使用PROC STANDARDIZE替换缺少的值
Proc stdize data=have out=want missing=mean reponly;
By state;
Var amount;
Run;
合并以平均数插补
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;
小提示:不允许同时更换和重新安装。放下替换件,这样做效果很好。