Shell 从命令行运行SAS过程
我有一些脚本,用于从正在更新的命令行运行简单的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/
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