Grep 变量在sas数据集中不存在

Grep 变量在sas数据集中不存在,grep,sas,cat,Grep,Sas,Cat,我试图通过UNIX命令检查变量GROUP是否存在于SAS数据集中,但不幸的是,它显示GROUP变量不存在于数据集中,但是GROUP变量存在于SAS数据集中 在区分大小写和全字匹配的命令中,我分别使用grep命令的I和w选项。但是UNIX命令仍然没有给出预期的结果。有什么方法可以解决这个问题吗 下面是我正在使用的命令: sasfile="sasdata" rwords="GROUP" cat $sasfile | grep -iqw "$rwords" 谢谢你你可以试试: sasfile="s

我试图通过UNIX命令检查变量
GROUP
是否存在于SAS数据集中,但不幸的是,它显示
GROUP
变量不存在于数据集中,但是
GROUP
变量存在于SAS数据集中

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

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

sasfile="sasdata"
rwords="GROUP"

cat $sasfile | grep -iqw "$rwords"
谢谢你

你可以试试:

sasfile="sasdata"
rwords="GROUP"
grep -iw "$rwords" "$sasfile"
这些命令与原始命令之间的唯一区别是我省略了
cat
和grep的quiet标志
-q

sasdata
中的示例输入:

fasd group                                                               
fdsfds fdsfdsa                                                           
fdsfd as GROUP afdsfdsa
输出:

fasd group fdsfd as GROUP afdsfdsa
如先前评论中所述

SAS数据集使用专有格式存储在磁盘文件中。 可能有编码和存储方法不能产生 您在所述磁盘文件的纯文本检查中查找的信息

在SAS会话中运行SAS代码是收集数据集信息的最终方式

那代码是什么样子的

  • Proc内容
  • 使用
    VARNAME
    函数的数据步骤或宏代码
  • 。。。还有很多其他的方法
在UNIX中,SAS可以使用stdio

来自“用于UNIX环境的SAS(R)9.2 Companion”

详细信息

此选项告诉SAS从标准输入(stdin)获取其输入, 将其日志写入标准错误(stderr),并写入其输出 到标准输出(标准输出)。

此选项设计用于运行SAS 以批处理模式或通过shell脚本。如果指定此选项 SAS以交互方式启动线路模式会话。

STDIO选项 覆盖DMS、DMSEXP和EXPLORER系统选项。斯特迪奥酒店 选项不影响Stdio、Stdin和Stderr的分配 文件引用。有关更多信息,请参见UNIX环境中SAS分配的文件引用 信息。

例如,在下面的SAS命令中,文件 myinput用作源程序,文件myoutput和mylog 分别用于程序输出和日志。

sas-stdiomyoutput 2>mylog


如果您使用的是C shell,那么应该 使用括号:

(sas-stdiomyoutput)>&输出日志

使用-stdio,您需要一个简短的SAS程序,该程序可以指示数据集中是否存在变量,或者可能发出数据集中的变量列表以供进一步的shell处理。
Proc CONTENTS
步骤简短而甜蜜

大海捞针

sasfile=<path to data set file>/<dataset>.sas7bdat
needle=GROUP
echo "Proc CONTENTS data=""$sasfile""" | sas -stdio | grep $needle

谢谢你的建议。我使用的命令与你建议的相同。它适用于rest变量,但不适用于“组”变量。我不确定SAS数据集有什么问题。我仔细检查了变量名的命令。SAS数据集使用专有格式存储在磁盘文件中。可能存在编码和存储方法无法生成您在对grep确定的单词进行纯文本检查时所需的信息。您是否尝试将
字符串的输出进行grepping
strings$sasdataset | grep-i GROUP
Hi Richard,是的,我将SAS数据集变量名称保留在字符串中,然后从UNIX命令搜索SAS数据集中的那些字符串(SAS变量)。请更新显示UNIX命令输出的问题
strings$sasfile
sasfile=<path to data set file>/<dataset>.sas7bdat
needle=GROUP
echo "Proc CONTENTS data=""$sasfile""" | sas -stdio | grep $needle
echo "Proc CONTENTS noprint data=""$sasfile"" out=list;data _null_;set list;file print;put name;"
| sas -stdio
| grep -i "GROUP"