使用BY语句PROC FREQ多个双向表

时间:2018-01-16 20:24:57

标签: sas

我想创建多个由某个变量分层的双向表。我希望打印的顺序是这样的:

"AxB when strata=1

AxB when strata=2

AxC when strata=1"

etc...

Instead, my code gives me

"AxB when strata=1
AxC when strata=1
AxB when strata=2"
etc...

这是我的代码:

PROC SORT data=mydata;
by riskgroup;
run;

PROC FREQ data=mydata;
by riskgroup;
tables Stent*(RACE INCOME EDUCATION);
run;

谢谢你的帮助!

2 个答案:

答案 0 :(得分:1)

只需使用多个TABLES语句。

PROC FREQ data=mydata;
  tables riskgroup*Stent*RACE;
  tables riskgroup*Stent*INCOME;
run;

如果你的变量列表很长,那么写一个宏(或其他方法)来生成语句。

答案 1 :(得分:1)

不幸的是,

BY本身就是这样做的(它首先计算x1表,然后计算x2表)。

您可以选择:PROC FREQPROC TABULATE都有“页面”的概念,或多或少。而不是by有第三个十字路口:

所以而不是:

proc sort data=sashelp.cars out=cars;
  by origin;
run;

proc freq data=cars; 
  by origin;
  table type*(cylinders drivetrain);
run;

你想:

proc freq data=cars; 
  table origin*type*(cylinders drivetrain);
run;

你甚至不必先在这里排序。

和表格中的等价物,我更喜欢:

proc tabulate data=sashelp.cars;
  class Origin Cylinders Type DriveTrain;
  tables origin, Type, Cylinders;
  tables origin, Type, DriveTrain;    
run;

注意这里的多个table语句,你可以在任何一个proc中做到这一点,它有时看起来更清洁,特别是在进行3级交叉时。