【问题标题】:SAS DS2 put statement output to a fileSAS DS2 put 语句输出到文件
【发布时间】:2016-10-05 21:14:17
【问题描述】:

我有一个 SAS DS2 程序,它从如下数据步骤在屏幕上打印输出,我想将输出引导到文件中。 AFAIK,“文件”是 DS2 中缺少的功能,因为 DS2 当前读取和写入表,有人可以告诉我如何将 ds2 程序的输出流式传输到文件吗?谢谢。

 put '********* Body (html contents from a stream) **********/';
 put _body;

问候, AKS

【问题讨论】:

  • 类似proc ds2; data _null_; dcl package webmethods webM(); method init(); put 'Start of init'; end; method run(); _body = webM.extractData(_url); put '********* Body (after html elements removal) **********/'; put _body; end; method term(); put 'Running Term method...'; end; enddata; run;
  • 是否需要 DS2中?我认为标准是在标准数据步骤中写入文件 i/o。
  • 你是对的乔,在标准数据步骤中它相当简单,但要求是我需要使用 DS2 将输出存储在文件中。或者有没有办法将变量输出传递给数据步骤?还是从数据步调用 DS2 过程?
  • 你可以创建一个数据集,然后使用数据步骤呢?

标签: sas datastep


【解决方案1】:

DS2 不具备超出 SAS 或 SQL 或类似目标的文件 i/o 功能。 DS2 的存在主要是为了实现与 Hadoop 和 Teradata 以及其他一些大数据目标的轻松连接;希望它在未来会得到扩展,但它现在还很年轻,还没有得到很好的利用。

也就是说,有一些……创造性的解决方法。一种可能的答案涉及使用日志。这不是一个很棒的解决方案,但它确实有效。

基本上,关闭notes和source,然后PROC PRINTTO将日志重定向到您想要的文件,PUT到日志,然后重定向回来并重新打开。警告和错误仍然会记录在日志中,所以不要有任何这些。

这绝对是不是生产代码的绝佳解决方案。对于生产代码,我强烈建议写入 SQL 表或 SAS 数据集,然后使用老式数据步骤生成输出。 DS2 目前不适合这类事情。即使语言没有扩展为具有此功能,将来也可能会编写包以更有帮助地执行此操作; JSON 包是一个很好的起点,虽然我认为它现在没有这个功能。

这是一个使用日志的例子(一个非常做作的例子):

proc sql;
  select name into :namestr
    separated by ' '
    from sashelp.class
  ;
  select age into :agestr
    separated by ' '
    from sashelp.class;
quit;

%let namestr = %str(%')&namestr%str(%');
%let agestr  = %str(%')&agestr%str(%');

options nonotes nosource;
proc printto log="c:\temp\testds2.txt" new;
proc ds2;
  data _null_;
    method init();        
        dcl int rc;
        dcl nvarchar(15) name;
        dcl int age;
        dcl double iter;
        dcl nvarchar(1000) namestr;
        dcl nvarchar(500) agestr;
        name ='';
        age  = .;
        namestr= &namestr.;
        agestr = &agestr.;
        do iter = 1 to countw(namestr);
          name = scan(namestr,iter);
          age  = scan(agestr,iter);
          put name  age;
        end;
    end;

  enddata;
  run;
quit;
proc printto; run;
options notes source;

【讨论】:

  • 像魅力一样工作。谢谢乔。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-18
  • 1970-01-01
  • 1970-01-01
  • 2022-12-05
相关资源
最近更新 更多