Shell 从命令行运行SAS过程

Shell 从命令行运行SAS过程,shell,unix,sas,Shell,Unix,Sas,我有一些脚本,用于从正在更新的命令行运行简单的SAS命令。我遇到的一个问题是proc freq。它现在写的很好,但是我希望能够更改输出的格式 以下是工作代码: #!/bin/bash echo "libname home ''; proc freq data=home.$1; tables $2/ missing list;" > user$USER.sas nohup sas -memsize 0m -sortsize -0m -autoexec /users/me/sastools/

我有一些脚本,用于从正在更新的命令行运行简单的SAS命令。我遇到的一个问题是
proc freq
。它现在写的很好,但是我希望能够更改输出的格式

以下是工作代码:

#!/bin/bash
echo "libname home ''; proc freq data=home.$1; tables $2/ missing list;" > user$USER.sas 
nohup sas -memsize 0m -sortsize -0m -autoexec /users/me/sastools/autoexec.sas user$USER.sas
more user$USER.lst
现在,我做了一些更改,允许我更改输出格式

#!/bin/bash
echo "libname home ''; proc freq data=home.$1; tables $2/ missing out=t outcum noprint; run;
proc print data=t(drop=percent cum_pct) noobs; format count cum_freq comma15.; run;" > user$USER.sas
nohup sas -memsize 0m -sortsize -0m -autoexec /users/me/sastools/autoexec.sas user$USER.sas
more user$USER.lst
如果我只在
tables
语句中指定一个变量,那么新代码就可以工作,但这种情况很少发生。当我尝试添加多个变量时,它只返回第一个变量

下面是一些如何运行的示例:

fr dataset var1*var2
fr 'dataset; where var1 = condition; weight var2;' var4*var5

提前感谢您的帮助。

我怀疑
*
正在被扩展,或者被视为
*
字符以外的内容。为了避免这个问题,当你通过这个论点时,试着引用它

fr dataset "var1*var2"

这里的问题是
outcum
选项。即使指定了
list
outcum
也只适用于单向表。规避此问题的方法是添加一个数据步骤来计算任何累积统计数据

#!/bin/bash
echo "libname home ''; proc freq data=home.$1; tables $2/ missing out=t noprint; run;
data t; set t(drop=percent); Cum_Freq + Count; run;
proc print data=t noobs; format count cum_freq comma15.; run;" > user$USER.sas
nohup sas -memsize 0m -sortsize -0m -autoexec /users/me/sastools autoexec.sas user$USER.sas
more user$USER.lst

我希望这能帮助任何有类似问题的人。

谢谢你的建议,问题实际上是
outcum
选项。我不知道这个参数对n路(n>1)表不起作用。我只需要在数据步骤中重新创建
Cum_Freq
。您可能需要使用
-stdio
命令行选项。这将消除创建物理SAS程序文件的需要。另外,它将使脚本中的SAS代码行看起来更正常,而不必被包装在ECHO命令中。@Tom您建议如何使用
-stdio
?当我从命令行使用该选项时,它通常是这样的格式:
echo“SAS code”| SAS-stdio
。您可以将命令文件内容重定向到std输入,例如:
SAS-stdio