另外transpose的时候我用了prefix,变量名变成com_A com_B ......,但是后面如何引用这些变量?直接var com_* (我试过这个,告诉我没有这个变量, )作者: shiyiming 时间: 2009-12-17 21:20 标题: Re: 缺失值的处理 [code:2kvsnbz5]
data raw;
input com $ date yymmdd8. spread;
format date yymmdd10.;
datalines;
A 20020101 .
A 20020202 .
A 20020203 60
A 20030304 70
B 20020101 40
B 20020202 .
B 20030304 60
B 20030305 .
B 20030306 .
C 20020101 .
C 20020202 .
C 20030304 70
;
%let valid_pct=0.4;
data temp(drop=valid_n valid_pct prev_spread next_spread );
valid_n=0;
do _n_=1 by 1 until(last.com);
set raw;
by com;
if not missing(spread) then valid_n+1;
if valid_n=1 then do;
if not missing(spread) then prev_spread=spread;
end;
end;
valid_pct=round(valid_n/_n_,0.01);
valid_n=0;
do _n_=1 to _n_;
retain next_spread;
set raw;
if not missing(spread) then do;
valid_n+1;
next_spread=spread;
end;
if valid_n=0 then spread=prev_spread;
else if missing(spread) then spread=next_spread;
if valid_pct ge &valid_pct then output;
end;
run;[/code:2kvsnbz5]
可以用com_: 的方式引用前缀为com_的变量列表作者: shiyiming 时间: 2009-12-17 22:18 标题: Re: 缺失值的处理 谢谢hope大虾!!!
我可不可以先把数据transpose,每个公司的数据是一个变量,然后对每个变量做上述处理呢?比如missing value>40%的变量丢掉,其他的missing value用附近的填上?这时候在循环的n那里怎么处理?作者: shiyiming 时间: 2009-12-18 10:57 标题: Re: 缺失值的处理 [quote:2a599tk1]不过又有新问题出现,因为原来数据里面各公司的date不太一样,transpose之后还是出现了大量的missing value。[/quote:2a599tk1]
不了解你的业务,没什么想法
[quote:2a599tk1]我可不可以先把数据transpose,每个公司的数据是一个变量,然后对每个变量做上述处理呢?[/quote:2a599tk1]
不理解转置后“每个公司的数据是一个变量”,是observation吧?如果是,不如偷个懒,现预处理一下,再重用原有的程序
[code:2a599tk1]proc sql;
create table date_list as
select *
from (select distinct(com) from raw),
(select distinct(date) from raw)
order by com, date;
create table temp as
select a.com, a.date, b.spread
from date_list a left join raw b
on a.com=b.com and a.date=b.date
order by com, date;
quit;[/code:2a599tk1]作者: shiyiming 时间: 2009-12-18 11:33 标题: Re: 缺失值的处理 咔咔,就是我想要的,big hug to hope!!!