SAS中的交叉表-频率表



数据集为:

data sample;
input FY TC;
datalines;
2013 1
2014 5
2013 6
2015 7
2016 1
2015 5
2016 2
2014 2
2013 7
2014 4
2017 5
2018 1
2018 6
2015 4
2014 2
2015 4
;

输出想要的:

FY  tc1 tc2 tc3 tc4 tc5 tc6 tc7
2013    1   0   0   0   0   1   1
2014    0   2   0   1   1   0   0
2015    0   0   0   2   1   0   1
2016    1   1   0   0   0   0   0
2017    0   0   0   0   1   0   0
2018    1   0   0   0   0   1   0

上述输出中的重要一点是,TC=3没有数据点,但我希望它在我的输出数据集中,我稍后需要在另一个步骤中进行计算。同样,TC=3数据不可用性仅用于描述和一个特定类别(例如:商业地产)。对于其他类别,我可能会丢失TC=4的数据点(例如住宅房地产)等等。所以我需要一个交叉表,在这个表中,无论TC=1到TC=7是否有任何数据点可用,我都可以为每个TC=1到TC=7提供频率列。

我很清楚PROC REPORT,但它没有为TC=3创建表。我认为可以使用PROC SQL。请帮帮我。我更喜欢PROC SQL, PROC REPORT,因为它们的输出可以在后面的步骤中轻松使用。

不推荐:PROC TABULATE, PROC FREQ

您可以使用格式和preloadfmtcompleterowscompletecols来获得您正在寻找的内容。下面是它的简单版本,您可能需要completecols和您的across变量—如果您提供实际代码来生成您的表,可以提供它。

proc format;
value age
9="Nine"
10="Ten"
11="Eleven"
12="Twelve"
13="Thirteen"
14="Fourteen"
15="Fifteen"
16="Sixteen"
17="Seventeen"
;;;;
run;

proc report data=sashelp.class completerows;
column age age=count;
format age age.;
define age/preloadfmt group order=internal;
define count/computed n;
run;

我也在SAS社区上发布了这个问题。我从那里抄了一些最热门的答案。

使用PROC REPORT:

data intermediate;
set sample end=eof;
weight=1;
output;
if eof then do;
tc=3;
weight=0;
output;
end;
run;
options missing=0;
proc report data=intermediate;
columns fy tc,weight;
define fy/group;
define tc/across;
define weight/sum ' ';
rbreak after/summarize;
run;

感谢:Paige Miller (SAS Community)

使用PROC table:

proc format;
value yrfmt
2013=2013
2014=2014
2015=2015
2016=2016
2017=2017
;

value tcfmt
1=1
2=2
3=3
4=4
5=5
6=6
7=7
;
run;
proc tabulate data=sample out=counts;
class FY tc / preloadfmt;
format tc tcfmt. fy yrfmt.;
table FY*tc / printmiss;
run;
proc sort data=counts;
by fy;
run;
proc transpose data=counts out=counts_t (drop=_name_) prefix=tc;
by fy;
var N;
id tc;
run;

来源:Irackley (SAS Community)

来自SAS社区的最佳答案:

proc sql;
select FY, 
sum(TC=1) as tc1,
sum(TC=2) as tc2,
sum(TC=3) as tc3,
sum(TC=4) as tc4,
sum(TC=5) as tc5,
sum(TC=6) as tc6,
sum(TC=7) as tc7
from sample
group by FY;
quit;

学分:Irackley (SAS Community)

相关内容

  • 没有找到相关文章