从sas输出报告

时间:2018-11-30 01:03:11

标签: sas

你好,我需要从我的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语句,但也不起作用。 任何人都可以提出实现此目标的方法吗?

4 个答案:

答案 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

相关问题