我希望报告城市纵向/面板数据集中的所有变量。 PROC MEANS
对此非常有用,但是这不能处理包含列的情况,这些列说明了有问题的变量没有丢失的第一个和最后一个日期。
我的数据看起来像这样:
data have;
input date $ city $ var1 var2 var3;
datalines;
2006Q1 NYC . 0.1 4
2006Q2 NYC . 0.48 6
2006Q3 NYC . 0.55 7
2006Q4 NYC 5 0.33 2
2007Q1 NYC 8 . 10
2007Q3 NYC 12 . 15
2006Q1 BOS 11 0.6 .
2006Q2 BOS 6 0.81 .
2006Q3 BOS 1 0.66 9
2006Q4 BOS 2 0.5 1
2007Q1 BOS 4 0.61 8
2007Q3 BOS 19 0.4 1
;
run;
我想要的输出是一个看起来像这样的表:
City Variable First Nonmiss Last Nonmiss
BOS var1 2006Q1 2007Q3
BOS var2 2006Q1 2007Q3
BOS var3 2006Q3 2007Q3
NYC var1 2006Q4 2007Q3
NYC var2 2006Q1 2006Q4
NYC var3 2006Q1 2007Q3
也许在PROC TRANSPOSE
中create table
PROC SQL
是最好的方式,但我愿意接受建议 - 而且我不确定从哪里开始
谢谢!
答案 0 :(得分:1)
我肯定会在这里做proc transpose
方法;它非常直截了当。这利用了{/ 1}}和first.
在实现last.
子句后定义的事实。
where
答案 1 :(得分:0)
绝对可以通过PROC MEANS / SUMMARY获得此输出,但您需要转置数据,以便取消我的答案。
data have;
input date $ city $ var1 var2 var3;
datalines;
2006Q1 NYC . 0.1 4
2006Q2 NYC . 0.48 6
2006Q3 NYC . 0.55 7
2006Q4 NYC 5 0.33 2
2007Q1 NYC 8 . 10
2007Q3 NYC 12 . 15
2006Q1 BOS 11 0.6 .
2006Q2 BOS 6 0.81 .
2006Q3 BOS 1 0.66 9
2006Q4 BOS 2 0.5 1
2007Q1 BOS 4 0.61 8
2007Q3 BOS 19 0.4 1
;
run;
proc print;
run;
data want;
input City $ Variable $ First_Nonmiss $ Last_Nonmiss $;
cards;
BOS var1 2006Q1 2007Q3
BOS var2 2006Q1 2007Q3
BOS var3 2006Q3 2007Q3
NYC var1 2006Q4 2007Q3
NYC var2 2006Q1 2006Q4
NYC var3 2006Q1 2007Q3
;;;;
proc print;
run;
proc transpose data=have out=havet name=variable;
by city date notsorted;
var var:;
run;
proc print;
run;
proc summary data=havet nway missing;
class city variable;
where not missing(col1);
output out=want2(drop=_:)
idgroup(out(date)=first_nonmiss)
idgroup(last out(date)=last_nonmiss)
;
run;
proc print;
run;
proc compare base=want compare=want2 listequalvars;
run;