我正在尝试检查SAS数据集文件中是否存在变量GROUP
,但不幸的是它显示数据集中不存在GROUP
变量,但是{{1 SAS数据集中存在变量。
在我的区分大小写和全字匹配的命令中,我分别使用了grep命令的GROUP
和i
选项。但是UNIX命令仍未给出预期的结果。我有什么方法可以解决这个问题吗?
以下是我正在使用的命令:
w
谢谢
答案 0 :(得分:1)
如前面评论中所述
SAS数据集使用专有格式存储在磁盘文件中。 可能有编码和存储方法不能产生 您在对所述磁盘文件进行纯文本检查时寻找的信息。
在SAS会话中运行SAS代码是收集有关数据集信息的明确方法。
该代码的外观如何?
Proc CONTENTS
VARNAME
功能在UNIX中,SAS可以使用stdio。
来自" SAS(R)9.2 UNIX环境伴侣",STDIO System Option: UNIX
<强>详情
此选项告诉SAS从标准输入(stdin)获取其输入, 将其日志写入标准错误(stderr),并写入其输出 到标准输出(标准输出)。
此选项专为运行SAS而设计 在批处理模式下或从shell脚本。如果指定此选项 交互式地,SAS启动线路模式会话。
STDIO选项 覆盖DMS,DMSEXP和EXPLORER系统选项。 STDIO 选项不会影响Stdio,Stdin和Stderr的分配 filerefs。有关更多信息,请参阅UNIX环境中由SAS分配的Filerefs 信息。
例如,在以下SAS命令中,该文件 myinput用作源程序,并存档myoutput和mylog 分别用于过程输出和日志。
sas -stdio < myinput > myoutput 2> mylog
如果你使用的是C shell,你应该这样做 使用括号:
(sas -stdio < myinput > myoutput ) >& output_log
使用-stdio,您需要一个简短的SAS程序,它可以指示数据集中是否存在变量,或者可能在数据集中发出变量列表以进行进一步的shell处理。 Proc CONTENTS
步骤简短而且甜蜜。
所以在大海捞针中寻找你的谚语
sasfile=<path to data set file>/<dataset>.sas7bdat
needle=GROUP
echo "Proc CONTENTS data=""$sasfile""" | sas -stdio | grep $needle
默认CONTENTS
输出可能包含yield一些错误匹配。所以你也可以试试
echo "Proc CONTENTS noprint data=""$sasfile"" out=list;data _null_;set list;file print;put name;"
| sas -stdio
| grep -i "GROUP"
答案 1 :(得分:0)
你可以尝试:
sasfile="sasdata"
rwords="GROUP"
grep -iw "$rwords" "$sasfile"
这些与原始命令之间的唯一区别是我省略了cat
和grep的安静标记-q
。
sasdata
中的示例输入:
fasd group
fdsfds fdsfdsa
fdsfd as GROUP afdsfdsa
输出:
fasd group fdsfd as GROUP afdsfdsa
-q
的{{1}}标记会取消标准输出,但grep
可以检索echo $?
的返回值。使用与以前相同的输入文件:
grep