【问题标题】:print log to table or to text file on LOCAL drive将日志打印到表或本地驱动器上的文本文件
【发布时间】:2019-01-30 10:57:11
【问题描述】:

我想将我的 SAS EG 日志内容导入 R。

我的第一个想法是使用PROC PRINTTO 打印到我将导入的文本文件,但我只能使用它将日志打印到安装 SAS 的服务器,我无法访问来自 R(我没有管理员权限)。

我想出了一种从 R 运行 egp 项目并从 R 读取 SAS 表的方法,因此如果我可以将日志内容重定向到表或宏变量,我将能够获取日志然后存储到一个表中。

我该怎么做?

【问题讨论】:

  • EG没有下载文件的流程步骤吗?
  • @Tom 确实好像有 PROC DOWNLOAD support.sas.com/documentation/cdl/en/connref/61908/HTML/default/… 。我试过PROC DOWNLOAD INFILE=&address_on_server OUTFILE=&local_path,但它给了我一个提示,说有一个错误,还有一个警告说PROC DOWNLOAD must be invoked with the RSUBMIT command.,但是这个RSUBMIT命令似乎是为了传达我可能没有的凭据,我没有不知道怎么用。

标签: sas enterprise-guide


【解决方案1】:

您可以将代码注册为 SAS 存储过程并将其运行,并使用 R 通过 http 调用它。附加 &_debug=log 将为您提供日志。只有一个选项.. 并避免 proc 打印。

【讨论】:

    【解决方案2】:

    我想出了一个办法:

    • 使用PROC PRINTTO 将我的项目日志重定向到服务器上我可以从SAS(而不是R)写入的文件。
    • 将此文件作为分隔文件读取到表格中,使用我将不得不尝试不在我的代码中使用的奇异分隔符(不幸的是,没有分隔符似乎不是一个选项)
    • 从 R 中导入此表并修剪不相关的第一行

    我的 SAS 代码:

    %let writeable_folder_on_server = /some_path/;
    %let temp_log_for_R = &writeable_folder_on_server/temp_log_for_R.txt;
    %let log_as_tbl = mylib.mytbl;
    
    proc printto log="&temp_log_for_R" print="&temp_log_for_R" new;
    run;
    
    proc datasets library= mylib nolist;
    delete mytbl;
    run;
    
    /* code producing log */
    %put foo;
    %put bar;
    
    proc import datafile="&temp_log_for_R" out=&log_as_tbl dbms=dlm replace;
     delimiter='§';
     getnames=no;
     GUESSINGROWS=MAX;
    run;
    

    IMPORT 过程的替换参数“应该”使表删除变得多余,但由于某种原因(可能是因为我使用了 oracle 库)它没有。

    它产生以下输出,存储到表中:

    NOTE: PROCEDURE PRINTTO used (Total process time):
    real time           0.01 seconds
    user cpu time       0.01 seconds
    system cpu time     0.01 seconds
    memory              904.75k
    OS Memory           15140.00k
    Timestamp           01/30/2019 01:29:21 PM
    Page Faults                       2
    Page Reclaims                     251
    Page Swaps                        0
    Voluntary Context Switches        1
    Involuntary Context Switches      0
    Block Input Operations            0
    Block Output Operations           0
    
    
    28
    29         proc datasets library= mylib nolist;
    30         delete mytbl;
    31         run;
    
    NOTE: Deleting mylib.mytbl (memtype=DATA)
    32
    33         /* code producing log */
    34         %put foo;
    foo
    35         %put bar;
    bar
    36
    
    NOTE: PROCEDURE DATASETS used (Total process time)
    real time           0.17 seconds
    user cpu time       0.02 seconds
    system cpu time     0.00 seconds
    memory              2425.56k
    OS Memory           17956.00k
    Timestamp           01/30/2019 01:29:21 PM
    2
    
    Page Faults                       5
    Page Reclaims                     858
    Page Swaps                        0
    Voluntary Context Switches        57
    Involuntary Context Switches      4
    Block Input Operations            0
    Block Output Operations           0
    

    【讨论】:

      猜你喜欢
      • 2018-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2010-09-14
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多