我认为替换缺失的逻辑非常清楚,但当我将其转发给SAS时,我发现它太复杂了。
答案 0 :(得分:1)
如果没有提供代码,我会给你一些粗略的指示,让你开始,但是把它放在你身上以确定任何细节。
首先,让我们为数据创建一个月份列,然后为每个月计算每个键的模式。另外,让我们将这些新数据放在自己的数据集中。
data temp;
set original_data;
month = month(date);
run;
proc univariate data=temp modes;
var values;
id key month;
out=mode_data;
run;
但是,此过程以您可能不需要的非常特定的方式计算模式(如果出现并列关系则默认为最低值,如果没有出现至少两次则不生成模式)文档:http://support.sas.com/documentation/cdl/en/procstat/63104/HTML/default/viewer.htm#procstat_univariate_sect027.htm < / p>
如果这对您不起作用,我建议使用proc sql来计算每个键,月份,值组合以及从那里计算您自己的模式。
proc sql;
create table mode_data as select distinct
key, month, value, count(*) as distinct_count
from temp
group by key, month, value;
quit;
从那里你可能想要创建一个包含数据中所有月份的表。
proc sql;
create table all_months as select distinct month
from temp;
quit;
请勿忘记在任何缺失的月份中将模式数据合并回模式数据,并使用lag
或retain
功能搜索前几个月的“旧模式”#34;
然后简单地将完全填充的模式数据合并回我们上面创建的临时数据集,并在缺少值时将缺失的值归入模式(即value =。)
希望有助于您入门。