【问题标题】:Vertical alignment in formatting plain-text proc report output格式化纯文本 proc 报告输出中的垂直对齐
【发布时间】:2016-02-03 09:27:21
【问题描述】:

我正在尝试以纯文本格式格式化来自proc report 的输出。我有一个变量,我通过它对观察结果进行分组,并且跨越两条线。这会导致明显的换行并分离分组的观察结果。有什么好办法解决这个问题吗?

以下最小示例说明了该问题。

编辑:该程序最好也适用于某些科目的一次观察。

计划:

* Toy data ;

data mydata;
  length subj $ 20;
  input subj $ val val2;
  datalines;
ID001|M 7.1 5.2
ID001|M 7.1 4.9
ID001|M 7.1 5.3
ID001|M 7.1 5.6
ID001|M 7.1 5.7
ID020|F 7.1 3.2
ID020|F 7.3 2.9
ID020|F 7.2 0.9
ID300|M 7.2 1.2
ID300|M 7.2 1.8
;
run;

* Create report ;

ods listing;
proc report data=mydata headline headskip split='|';
  column(subj val val2);
  define subj / order flow 'Subject ID|Sex';
  define val  / 'Value 1';
  define val2 / 'Value 2';

  break after subj / skip;
run;
ods _all_ close;

输出:

Subject ID                                
Sex                     Value 1    Value 2
------------------------------------------

ID001                       7.1        5.2
M                                         
                            7.1        4.9
                            7.1        5.3
                            7.1        5.6
                            7.1        5.7

ID020                       7.1        3.2
F                                         
                            7.3        2.9
                            7.2        0.9

ID300                       7.2        1.2
M                                         
                            7.2        1.8

期望的输出:

Subject ID                                
Sex                     Value 1    Value 2
------------------------------------------

ID001                       7.1        5.2
M                           7.1        4.9
                            7.1        5.3
                            7.1        5.6
                            7.1        5.7

ID020                       7.1        3.2
F                           7.3        2.9
                            7.2        0.9

ID300                       7.2        1.2
M                           7.2        1.8

所需的替代输出:

Subject ID                                
Sex                     Value 1    Value 2
------------------------------------------

ID001                     
M                           7.1        5.2
                            7.1        4.9
                            7.1        5.3
                            7.1        5.6
                            7.1        5.7

ID020                                       
F                           7.1        3.2
                            7.3        2.9
                            7.2        0.9

ID300                       
M                           7.2        1.2
                            7.2        1.8

或者类似于这些的东西,可以在视觉上清楚地分开组。

【问题讨论】:

    标签: formatting sas proc


    【解决方案1】:

    我缩进了性别,但你可以删除它。确保每个主题有 2 个或更多 obs。

    data mydata;
       length subj $ 20;
       input subj $ val val2;
       length sex $3;
       sex = '  '||scan(subj,-1);
       subj = scan(subj,1);
       datalines;
    ID001|M 7.1 5.2
    ID001|M 7.1 4.9
    ID001|M 7.1 5.3
    ID001|M 7.1 5.6
    ID001|M 7.1 5.7
    ID020|F 7.1 3.2
    ID020|F 7.3 2.9
    ID020|F 7.2 0.9
    ID300|M 7.2 1.2
    ID300|M 7.2 1.8
    ;;;;
       run;
    
    proc print;
       run;
    * Create report ;
    
    *ods listing;
    proc report data=mydata headline headskip split='|' list 
    /*      showall*/
          ;
       column(subj sex stub val val2);
       define subj / order noprint;
       define sex  / order noprint;
       define stub / computed width=10 'Subject' '  Gender';
       define val  / 'Value 1';
       define val2 / 'Value 2';
       break after subj / skip;
       compute before subj;
          xsubj = subj;
          endcomp;
       compute before sex;
          j = 0;
          xsex = sex;
          endcomp;
       compute stub / char length=20; 
          j + 1;
          if      j eq 1 then stub = xsubj;
          else if j eq 2 then stub = xsex;
          else                stub = ' ';
          endcomp;
       run;
    

    【讨论】:

    • 感谢您的回答。不幸的是,它也应该适用于每个受试者 1 次观察。你有处理这个的建议吗?
    • 我想你也会想要 OPTIONS MISSING=' ';如果你还没有它。请问您为什么使用 LISTING 输出?
    【解决方案2】:

    只要确保所有主题都有两个或更多的 obs,如果需要,可以添加一个。

    data addonemaybe / view=addonemaybe;
       set mydata;
       by subj;
       output;
       if first.subj and last.subj then do;
          call missing(of val:);
          output;
          end;
       run;
    

    【讨论】:

    • 这属于另一个答案,而不是单独的答案。
    • 我不想编辑我的答案。否决或编辑您是版主。
    • 我不是版主,实际上(他们的名字旁边有菱形)......但你应该在另一个答案中编辑它。这不是一个论坛 - 答案应该是独立的,而不是顺序的。
    • 答案确实提供了我在第一个答案中暗示的问题的答案,并且 OP 在对该答案的评论中确认并提出了问题。
    猜你喜欢
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多