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在对该答案的评论中确认并提问。