0

我有一个如下所示的数据集:

data have;
input ID P1 P2 P3 P4;
datalines;

ID    P1    P2    P3    P4
12    10    15    20    30
12    -     20    5     3
12    -     -     25    33
12    -     -     -     30
19    10    15    20    30
19    -     10    17    30
19    -     -     5     30
19    -     -     -     30
;
run;

我正在尝试构建一个名为 Year 的变量,然后可以使用它来识别 ID 和 P1-P4 是一个数组,每一行代表一年。这样数据集就会看起来像。

data want;
set have;
input ID P1 P2 P3 P4;
datalines;

ID    P1    P2    P3    P4 Year
12    10    15    20    30 2017
12    -     20    5     3  2018
12    -     -     25    33 2019
12    -     -     -     30 2020
19    10    15    20    30 2017
19    -     10    17    30 2018
19    -     -     5     30 2019
19    -     -     -     30 2020
;
run;

我最初使用此代码:

Data Year;
    do ID = 1 to 8;
        do Year = 2017 to 2020;
        output;
        end;
    end;
run;

data Final;
set have;
Merge Year;
run;

但是现在我每次都使用不同的数据集并且我不知道 ID 的结构,所以我不能每次都将 ID=1 更改为 8 以适应数据集。

我的问题:有没有办法通过数据集来做到这一点,可能是一个计数?

Count ID = 2017;
Year = count + 1;
4

1 回答 1

0

无需创建将与第一个合并的第二个数据集。

您确实需要对have数据集中的分组做出假设。假设是数据已经以允许将单调年份值分配给每个组中的每个连续行的方式进行排序或排列。

data want;
  set have;
  by id;
  if first.id 
    then year = 2017; %* initial year for a group;
    else year + 1; %* increment year for subsequent rows of a group;
run;
于 2018-03-16T11:07:17.863 回答