我有一个 2017 年到 2018 年每周收入百分比的数据集。有些人在 2017 年初没有数据,因为他们直到后来才开始赚钱。这些周编号为 201701、201702 - 201752 和 201801 - 201852。
我想要做的是有 104 个新变量,称为 WEEK0 - WEEK103,其中 WEEK0 将具有获得的金钱列的第一个非空列值。下面是一个数据示例:
MON_EARN_201701 MON_EARN_201702 MON_EARN_201703 MON_EARN_201704
30 21 50 65
. . 30 100
. 102 95 85
然后我希望我的数据具有以下列(示例)
WEEK0 WEEK1 WEEK2 WEEK3
30 21 50 65
30 100 . .
102 95 85 .
这些只是一个非常大的数据集的小例子。
我在想我需要尝试做一些 do 循环,所以到目前为止我尝试过的是:
DATA want;
SET have;
ARRAY mon_earn{104} mon_earn_201701 - mon_earn_201752 mon_earn_201801 -mon_earn_201852;
ARRAY WEEK {104} WEEK0 - WEEK103;
DO i = 1 to 104;
IF mon_earn{i} NE . THEN;
WEEK{i} = mon_earn{i};
END;
END;
RUN;
这不起作用,因为当第一个值为空时它不会填充 WEEK0。
如果需要更多信息,请发表评论,我会添加进来。
听起来你只需要找到复制的起点。
首先按日历月查看收入列表,直到找到第一个非缺失值。然后将从那里开始的值按相对月份复制到新的收入数组中。
data want;
set have;
array mon_earn mon_earn_201701 -- mon_earn_201852;
array week (104);
do i = 1 to dim(mon_earn) until(found);
if mon_earn{i} ne . then found=1;
end;
do j=1 to dim(week) while (i+j<dim(mon_earn));
week(j) = mon_earn(i+j-1);
end;
run;
注意:我简化了 ARRAY 定义。对于输入数组,我假设变量是按顺序定义的,以便您可以使用位置数组列表。对于 WEEK 数组 SAS,我和我都喜欢从 1 开始计数,而不是从 0 开始。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句