Formatting 格式化纯文本过程报告输出时的垂直对齐

Formatting 格式化纯文本过程报告输出时的垂直对齐,formatting,sas,proc,Formatting,Sas,Proc,我正在尝试将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

我正在尝试将
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
输出:

* 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
所需输出:

* 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
备选所需输出:

* 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

或者类似的东西,可以在视觉上清晰地将各组分开。

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

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;

只要确保所有受试者都有两个或多个OB,如果需要,添加一个即可

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

谢谢你的回答。不幸的是,它也应该适用于每个受试者1次观察。你有处理这个问题的建议吗?我想你也会希望缺少选项='';如果你还没有。我可以问一下为什么要使用列表输出吗?这属于另一个答案,而不是单独的答案。我不想编辑我的答案。否决投票或编辑你是主持人。事实上,我不是主持人(他们的名字旁边有钻石)。。。但是你应该在另一个答案中编辑它。这不是一个论坛-答案应该是独立的,而不是顺序的。答案确实提供了我在第一个答案中暗示的问题的答案,OP在对该答案的评论中确认并提问。