下面是我用来执行“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:>]
提前感谢您的帮助。
答案 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