【问题标题】:Row label is being truncated行标签被截断
【发布时间】:2021-11-18 00:21:08
【问题描述】:

我编写了以下查询以从 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;

显示总计行,但“总计”被截断为单个字符。

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

【问题讨论】:

    标签: sas proc-report


    【解决方案1】:

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

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

    select MILITARY_STAT_sERSS as MILITARY_STATUS length=11 format=$MILSTAT. 
    ...
    

    【讨论】:

    • 嗨,汤姆——完美的解决方案。非常感谢!
    【解决方案2】:

    另一种解决方案是为总数分配一个值(“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;
    

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 1970-01-01
      • 2019-03-24
      • 2020-08-14
      • 1970-01-01
      • 2020-08-24
      • 2017-12-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多