sas数据集中不存在变量

时间:2018-04-11 06:38:53

标签: grep sas cat

我正在尝试检查SAS数据集文件中是否存在变量GROUP,但不幸的是它显示数据集中不存在GROUP变量,但是{{1 SAS数据集中存在变量。

在我的区分大小写和全字匹配的命令中,我分别使用了grep命令的GROUPi选项。但是UNIX命令仍未给出预期的结果。我有什么方法可以解决这个问题吗?

以下是我正在使用的命令:

w

谢谢

2 个答案:

答案 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