如何在PROC报告中垂直堆叠分析变量?

时间:2019-06-04 19:04:05

标签: sas

我正在尝试在PROC报告中垂直堆叠多个变量。我与TABLATE或FREQ上的PROC REPORT有联系,因此使用REPORT的解决方案将是更可取的。

我已经测试了其他解决方案,但是无法使用我的数据找到成功。

proc format library = library ;
   value AGE
      1 = '18 to 29'  
      2 = '30 to 45'  
      3 = '46 to 64'  
      4 = '65 and over'  
      9 = 'NA' ;
   value SEX
      1 = 'Male'  
      2 = 'Female'  
      9 = 'NA' ;
   value Q16F
      1 = 'EXCELLENT'  
      2 = 'VERY GOOD'  
      3 = 'GOOD'  
      4 = 'FAIR'  
      5 = 'POOR'  
      8 = 'DON''T KNOW'  
      9 = 'NA/REFUSED' ;

DATA CHSS2017_sashelp (keep = q16 sex age);
SET CHSS2017.CHSS2017_sashelp;
FORMAT       q16 q16f.;
FORMAT       sex SEX.;
FORMAT       age AGE.;
RUN;

proc report data = CHSS2017_sashelp nowindows headline;
columns sex n, (q16);
define sex / group;
define q16 / across;
run;

预期结果将是具有多个变量的堆叠REPORT表: expected output

1 个答案:

答案 0 :(得分:0)

如果您对重复的标题/变量名满意,则可以使用两个报告过程。参见下面的代码,我使用了示例sas数据并稍微自定义了格式:

proc format ;
   value AGE
      1-10 = '1 to 10'  
      11-12 = '11 to 12'  
      13-High = '13 and over'  
      ;
   value $SEXv
      'M' = 'Male'  
      'F' = 'Female'  
      ;
   value Q16F
      1 = 'EXCELLENT'  
      2 = 'VERY GOOD'  
      3 = 'GOOD'  
      4 = 'FAIR'  
      5 = 'POOR'  
      8 = 'DON''T KNOW'  
      9 = 'NA/REFUSED' ;
run;

%macro RandBetween(min, max);
   (&min + floor((1+&max-&min)*rand("uniform")))
%mend;

data class;
 set sashelp.class;
   q16 = %RandBetween(1, 9);
   FORMAT       q16 q16f.;
   FORMAT       sex $SEXv.;
   FORMAT       age AGE.;
run;

proc report data = class nowindows headline;
columns age n, (q16);
define age/ group;
define q16 / across;
run;

proc report data = class nowindows headline;
columns sex n, (q16);
define sex / group;
define q16 / across;
run;

RandBetween宏仅用于此代码,您不必使用它