Вывести отчет из sas - PullRequest
       9

Вывести отчет из sas

0 голосов
/ 30 ноября 2018

Здравствуйте, мне нужно вывести файл данных из моего кода sas, что-то вроде:

#################################
###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 и использовать оператор заголовка для каждого комментария, но тоже не работает.Может кто-нибудь, пожалуйста, предложить способ достижения этого?

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Я попробовал это:

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

Итак, первая половина повторяется дважды в выходных данных и Input.Name и фактическомвходные переменные выводятся в разных строках, тогда как я хотел, чтобы это было что-то вроде: input.Data=1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b1|2|a|1|3|b

0 голосов
/ 30 ноября 2018

Вы не сказали, как выглядит ваш набор данных.Итак, давайте просто придумаем один.

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;
0 голосов
/ 04 декабря 2018

Я намерен получить что-то вроде этого: не работает, он ставит префикс перед каждой строкой.что я собираюсь сделать:

#################################
###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 выходного набора данных в той же строке, а затем нам нужно вывести несколько других переменных, после этого.

0 голосов
/ 30 ноября 2018

Это довольно индивидуальный отчет.Каков конечный пункт вывода, текстовый файл или 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;
...