如何使用/执行“在sas宏中读取unix的命令”

时间:2018-04-03 07:01:21

标签: macros sas

下面是我用来执行“read sub”的脚本,但遗憾的是无法获得所需的结果。

#!/bin/sh

{
echo '%macro read;'

echo '%sysexec ( echo -n "Sub setting condition:");'
echo '%sysexec ( read sub) ;'
echo '%sysexec ( echo "Checking the macro [$sub]");'

echo '%mend;'

echo '%read;'
} > "/home/read.sas"
cd /home
sas /home/read.sas

以下是我期望从上面的脚本中得到的结果:

Checking the macro [<text after entering the sub setting condition:>]

提前感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您的输出可能保存在sas日志文件中。

请参阅下面的示例命令:指定要执行的文件以及保存日志文件的位置:

/sas/940/SASFoundation/9.4/sas /projects/program1.sas -log "/projects/program1.log" 

答案 1 :(得分:1)

确保您正在执行的.sas文件是SAS程序而不是仅包含宏功能的文件。

答案 2 :(得分:1)

您需要解释您要做的事情。您的程序可能会成功从控制台获取用户输入,但该值将存储在SAS代码无法访问的环境变量中。

您可以通过将其写入文件然后从文件中读取来检索输入的值。但是你需要确保read命令和引用环境变量read的命令在同一个子shell中运行。

因此,如果我将此程序创建为read.sas

data _null_;
  call system ( 'echo -n "Sub setting condition:";read sub ; echo "Sub is $sub" >read.txt ' );
run;
data _null_;
  infile 'read.txt';
  input;
  put _infile_;
run;

使用sas read运行它。然后SAS日志如下所示:

1          data _null_;
2            call system ( 'echo -n "Sub setting condition:";read sub ; echo "Su
b is $sub" >read.txt ' );
3          run;

NOTE: DATA statement used (Total process time):
      real time           2.80 seconds
      cpu time            0.02 seconds


4          data _null_;
5            infile 'read.txt';
6            input;
7            put _infile_;
8          run;

NOTE: The infile 'read.txt' is:
      Filename=.../test/read.txt,
      Owner Name=xxxx,Group Name=xxx,
      Access Permission=-rw-rw-r--,
      Last Modified=05Apr2018:08:45:02,
      File Size (bytes)=16

Sub is Hi there
NOTE: 1 record was read from the infile 'read.txt'.
      The minimum record length was 15.
      The maximum record length was 15.
NOTE: DATA statement used (Total process time):
      real time           0.00 seconds
      cpu time            0.00 seconds