欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

sas table将缺失值计入百分比_SAS:通过数据块填充缺失值

发布时间:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的这篇文章主要介绍了 sas table将缺失值计入百分比_SAS:通过数据块填充缺失值 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

想象这样做的代码并不难,问题在于它很快就会显得杂乱无章。

如果数据集不是太大,一个方法,你可以考虑以下方法:

/* We find all gaps. the output dataset is a mapping: the data of which minute (reference_minute) do we need to create each minute of data*/

data MINUTE_MAPPING (keep=current_minute reference_minute);

set YOUR_DATA;

by min;

retain last_minute 2; *set to the first minute you have;

if _N_ NE 1 and first.min then do;

/* Find gaps, map them to the last minute of data we have*/

if last_minute+1 < min then do;

do current_minute=last_minute+1 to min-1;

reference_minute=last_minute;

output;

end;

end;

/* For the available data, we map the minute to itself*/

reference_minute=min;

current_minute=min;

output;

*update;

last_minute=min;

end;

run;

/* Now we apply our mapping to the data */

*you must use proc sql because it is a many-to-many join, data step merge would give a different outcome;

proc sql;

create table RESULT as

select YD.current_minute as min, YD.rank, YD.qty

MINUTE_MAPPING as MM

join YOUR_DATA as YD

on (MM.reference_minute=YD.min)

;

quit;

更高性能的方法将涉及与阵列挂羊头卖狗肉。 但我觉得这种方法更有吸引力(免责声明:一开始就想到),之后其他人更快地掌握(免责声明:imho)。

良好的措施,阵列方法:

data RESULT (keep=min rank qty);

set YOUR_DATA;

by min;

retain last_minute; *assume that first record really is first minute;

array last_data{5} _TEMPORARY_;

if _N_ NE 1 and first.min and last_minute+1 < min then do; *gap found;

do current_min=last_minute+1 to min-1;

*store data of current record;

curr_min=min;

curr_rank=rank;

curr_qty=qty;

*produce records from array with last available data;

do iter=1 to 5;

min = current_minute;

rank = iter;

qty = last_data{iter};

if qty NE . then output; *to prevent output of 5th element where there are only 4;

end;

*put back values of actual current record before proceeding;

min=curr_min;

rank=curr_rank;

qty=curr_qty;

end;

*update;

last_minute=min;

end;

*insert data for use on later missing minutes;

last_data{rank}=qty;

if last.min and rank<5 then last_data{5}=.;

output; *output actual current data point;

run;

希望它能帮助。 请注意,目前我无法访问SAS客户端。所以未经测试的代码可能包含一些错字。

总结

以上是生活随笔为你收集整理的sas table将缺失值计入百分比_SAS:通过数据块填充缺失值的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。