你好,我需要从我的sas代码中输出一个dat文件,类似:
#################################
###Game Of Thrones
################################
Number of Candidates = 1
################################
Number of Games = 3
################################
Controlppt = 1
Controlgame = 2
################################
# PPt 1 = Abc
# PPt 2 = Bcd
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
################################
因此,它是注释和文本的混合,下面是管道分隔的数据。 我尝试使用proc export,但没有打印任何标题,我也尝试了Ods,并为每个注释使用title语句,但也不起作用。 任何人都可以提出实现此目标的方法吗?
答案 0 :(得分:2)
您没有说出数据集的样子。因此,让我们发明一个。
data have ;
ncandidates=1; ngames=3; controlppt=1; controlgame=2;
ppt1='Abc'; ppt2='Bcd';
infile cards dsd dlm='|';
input (var1-var21) ($);
cards;
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
;
现在,一个简单的DATA步骤就可以编写报告了。
filename report 'myreport.txt';
data _null_;
file report dsd dlm='|' ;
set have end=eof;
if _n_=1 then put
32*'#'
/ '###Game Of Thrones'
/ 32*'#'
/ 'Number of Candidates = ' ncandidates
// 32*'#'
/ 'Number of Games = ' ngames
// 32*'#'
/ 'Controlppt = ' controlppt
/ 'Controlgame = ' controlgame
/ 32*'#'
/ '# PPt 1 = ' ppt1
/ '# PPt 2 = ' ppt2
;
put var1-var21 ;
if eof then put 32*'#';
run;
答案 1 :(得分:0)
这是一个非常定制的报告。您的输出目标是什么,文本文件还是PDF?
这很有可能通过PUT语句来实现,尤其是在文本文件中。如果是HTML或RTF,则可能会略有不同。
以下是您所需的大致信息。
data _null_;
file '/folders/myfolders/demo.txt';
set sashelp.class;
put 'Name';
put '###########################';
put name;
put 'Sex';
put '###########################';
put (_numeric_) ('|');
put ;*empty line;
put ;*empty line;
run;
答案 2 :(得分:0)
我打算得到这样的东西: 不起作用,它将前缀放在每行之前。我打算做什么:
#################################
###Game Of Thrones
################################
Number of Candidates = 1
################################
Number of Games = 3
################################
Controlppt = 1
Controlgame = 2
################################
# PPt 1 = Abc
# PPt 2 = Bcd
input.data=1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
################################
output.data=<another dataset's vars>
############################################
如何获取input.data,然后将输入数据集输出的所有obs输出到同一行,然后再输出其他一些var。
答案 3 :(得分:0)
我尝试过这个:
data have ;
ncandidates=1;
ngames=3; controlppt=1; controlgame=2;
ppt1='Abc';
ppt2='Bcd';
infile cards dsd dlm='|';
input (var1-var21) ($);
cards;
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
;
run;
data have1;
infile cards dsd dlm='|';
input (var1-var2) ($);
cards;
1|2
2|3
3|4
4|5
5|6
;
run;
filename report '/home/sas/l119834/myreport.txt';
data _null_;
file report dsd dlm='|' ;
eof=0;
do until(eof);
set have end=eof;
if _n_=1 then put
32*'#'
/ '###Game Of Thrones'
/ 32*'#'
/ 'Number of Candidates =' ncandidates
// 32*'#'
/ 'Number of Games = ' ngames
// 32*'#'
/ 'Controlppt = ' controlppt
/ 'Controlgame = ' controlgame
/ 32*'#'
/ '# PPt 1 = ' ppt1
/ '# PPt 2 = ' ppt2
/ 'Input.Data='
;
put var1-var21 @@;
if eof then put / 32*'#';
end;
put // 83*'#'
/ '### Output Data'
/ 83* '#'
/ '# Output field name, usage = Output Area|Name'
/ '# Area = 0, 1, 2, 3, 4, 5'
// 'output.Name='
;
eof1=0;
do until(eof1);
set have1 end=eof;
put var1-var2 @@;
end;
run;
并在报告中得到它:
################################
###Game Of Thrones
################################
Number of Candidates =1
################################
Number of Games = 3
################################
Controlppt = 1
Controlgame = 2
################################
# PPt 1 = Abc
# PPt 2 = Bcd
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b|################################
###Game Of Thrones
################################
Number of Candidates =1
################################
Number of Games = 3
################################
Controlppt = 1
Controlgame = 2
################################
Input.Data=
# PPt 1 = Abc
# PPt 2 = Bcd
1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b
################################
###################################################################################
### Output Data
###################################################################################
# Output field name, usage = Output Area|Name
# Area = 0, 1, 2, 3, 4, 5
output.Name=
1|2|2|3|3|4|4|5|5|6
因此,上半部分在output和Input.Name中重复两次,而实际的输入vars在不同的行上输出,而我希望它类似于:input.Data=1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b