我有一个数据集,其中包含一个测量和它收集的具体日期。我想在几天之间复制这些值,直到最后一天。例如,以下是复制数据之前的数据:
Measurement Day
Subject1 .85 -1
Subject1 .86 1
Subject1 .91 7
Subject1 .83 9
Subject2 .77 0
Subject2 .82 5
Subject2 .86 12 我想修改上面的数据集,如下所示:
Measurement Day
Subject1 .85 -1
Subject1 .85 0
Subject1 .86 1
Subject1 .86 2
Subject1 .86 3
Subject1 .86 4
Subject1 .86 5
Subject1 .86 6
Subject1 .91 7
Subject1 .91 8
Subject1 .83 9
Subject2 .77 0
Subject2 .77 1
Subject2 .77 2
Subject2 .77 3
Subject2 .77 4
Subject2 .82 5
Subject2 .82 6
Subject2 .82 7
Subject2 .82 8
Subject2 .82 9
Subject2 .82 10
Subject2 .82 11
Subject2 .86 12 发布于 2019-07-25 17:16:55
考虑使用辅助数据集展开数据,然后使用左联接merge并进行前向填充。
data helper;
set input (keep = Subject Day);
by Subject;
if not first.Subject and last.Subject;
max_day = max(Day);
day = 0;
do until(day > max_day);
output;
day + 1;
end;
drop max_day;
run;
data output;
merge helper (in=h)
input (in=i);
if h;
by Subject Day;
retain _k;
if not missing(Measurement) then _k=Measurement;
else if missing(Measurement) then Measurement=_k;
if not missing(Measurement);
drop _k;
run;数据
data input;
infile datalines delimiter=',' DSD;
length subject $ 10;
input subject measurement day;
datalines;
Subject1,.86,1
Subject1,.91,7
Subject1,.83,9
Subject2,.77,0
Subject2,.82,5
Subject2,.86,12
;输出
Obs subject day measurement
1 Subject1 1 0.86
2 Subject1 2 0.86
3 Subject1 3 0.86
4 Subject1 4 0.86
5 Subject1 5 0.86
6 Subject1 6 0.86
7 Subject1 7 0.91
8 Subject1 8 0.91
9 Subject1 9 0.83
10 Subject2 0 0.77
11 Subject2 1 0.77
12 Subject2 2 0.77
13 Subject2 3 0.77
14 Subject2 4 0.77
15 Subject2 5 0.82
16 Subject2 6 0.82
17 Subject2 7 0.82
18 Subject2 8 0.82
19 Subject2 9 0.82
20 Subject2 10 0.82
21 Subject2 11 0.82
22 Subject2 12 0.86 https://stackoverflow.com/questions/57205986
复制相似问题