假设我有这个 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
这与处理一个变量的方式几乎相同。在您的
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