1

我编写了以下查询以从 SAS 表中提取不同军事状态的列表。

proc sql;
create table mil_stat as
    select distinct MILITARY_STAT_sERSS format $MILSTAT. as MILITARY_STATUS, 
        count(*) as TOTAL 
    from FPE
    group by MILITARY_STAT_sERSS;
quit;

我需要添加一个显示总计数的摘要行。我试图在 proc sql 语句中执行此操作,但无法弄清楚如何执行此操作。因此,我编写了以下 proc 报告语句以在报告中提供所需的行。

PROC REPORT DATA=work.mil_stat;
column MILITARY_STATUS TOTAL;
where MILITARY_STATUS ne '5';
define MILITARY_STATUS / group;
rbreak after / summarize style=[font_weight=bold];
compute MILITARY_STATUS;
    if MILITARY_STATUS ne . then c_MILITARY_STATUS=MILITARY_STATUS;
    else c_MILITARY_STATUS=' ';
    if _break_ = '_RBREAK_' then MILITARY_STATUS = "Grand Total";
endcomp;
run;

总计行显示,但“总计”被截断为单个字符。 proc报告语句的结果表

任何能够显示“总计”字符串的帮助将不胜感激。

4

2 回答 2

1

看起来 MILITARY_STAT_sERSS 只有一个字节长。而且,您与该变量一起使用的格式 $MILSTAT. 没有任何“G”解码。

尝试使 MILITARY_STATUS 足够长以存储“总计”。

select MILITARY_STAT_sERSS as MILITARY_STATUS length=11 format=$MILSTAT. 
...
于 2021-09-24T18:47:28.553 回答
0

另一种解决方案是为总数分配一个值(“G”很好,或“T”,或任何适合您的数据的值),然后在格式中使用它。这将是我的首选解决方案,因为它避免了未格式化的值,并且使用更少的空间,但确实需要您能够调整格式(或者如果没有,您可以使用直通格式)。

proc format;
  value $sex
  'F' = 'Female'
  'M' = 'Male'
  'T' = 'Grand Total';
quit;

proc report data=sashelp.class;
columns sex height;
format sex $sex.;
define sex/group missing;
define height/analysis mean;
rbreak after/summarize;
compute sex;
    if _break_='_RBREAK_' then sex='Total';
endcomp;
run;
于 2021-09-24T19:33:16.440 回答