如何基于两个变量创建一系列数字?

问题描述 投票:0回答:1

假设我有这个 df

data df;
input Country $ Year;
datalines;
USA 2019
USA 2019
USA 2020
Canada 2019
Canada 2020
Canada 2020
;
run;

我知道如何基于一个变量创建一系列数字,但如何基于两个变量创建一系列数字。我想要以下输出

Country   Year   series
-------   ----   ------
USA       2019   1
USA       2019   2
USA       2020   1
Canada    2019   1
Canada    2020   1
Canada    2020   2
sas numbers series
1个回答
1
投票

这与处理一个变量的方式几乎相同。在您的

by
语句中指定这两个组。

data want;
    set df;
    by descending country year;

    if(first.year) then series = 0;

    series+1;
run;
Country Year    series
USA     2019    1
USA     2019    2
USA     2020    1
Canada  2019    1
Canada  2020    1
Canada  2020    2

在此代码中,说

if(first.year)
意味着这是该组
(country year)
中的第一年。从这个意义上讲,您的
by
组可以被认为是一个层次结构:

by var1 var2 var3 var4 ... varn

首先。 团体
第一个.var1 var1
第一个.var2 var1 var2
第一个.var3 var1 var2 var3
第一个.var4 var1 var2 var3 var4
... ...

您可以通过添加显示每组第一个值的二进制变量来验证这一点。将其视为

if(first.var1 AND first.var2)
的快捷方式。
first.var2
已经暗示了这一点。

data want;
    set df;
    by descending country year;

    first_country      = (first.country);
    first_country_year = (first.year);
run;
Country Year    first_country   first_country_year
USA     2019    1               1
USA     2019    0               0
USA     2020    0               1
Canada  2019    1               1
Canada  2020    0               1
Canada  2020    0               0
© www.soinside.com 2019 - 2024. All rights reserved.