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

Macros “如何使用/执行”;在sas宏中读取unix命令;,macros,sas,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;' } > "/ho

下面是我用来执行“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:>]
检查宏[]

提前感谢您的帮助。

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

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

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

确保您正在执行的.sas文件是sas程序,而不是仅包含宏函数的文件。

您需要解释您试图执行的操作。您的程序可能成功地从控制台获取用户输入,但该值将存储在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

你想做什么?如果要与SAS交互,请使用
窗口
%窗口
语句。或者学习SCL编程。嗨,汤姆,谢谢你的回复。我试图为sas程序编写一个shell脚本,但在上面的脚本中,“read”语句不能正常工作,它的“sub”值为空。理想情况下,当我们输入一些字符串以提示“sub-setting-condition:”时,它应该具有“sub”的值:如果
read
命令是在运行的SAS程序启动的命令shell中运行的,那么谁应该响应该命令?当我们运行shell脚本时,SAS应该以批处理模式运行,并且%sysexec函数将在unix上执行read命令。为什么?为什么不在shell脚本中执行
read
,并使用数据生成要运行的SAS代码?这可能真的有效,因为你要做的事情非常棘手。如果您真的需要从终端读取SAS,请尝试使用stdin作为填充。