SAS压缩:在压缩之前保留数字|

SAS压缩:在压缩之前保留数字|,sas,compression,Sas,Compression,所以我的一个变量被编码成了一个混乱的混合数值,文本,括号等等。实际上,我只需要提取记录为12345的数值(例如,不限于特定数量的数字,我的意思是它可以是n-k位到n位),然后是| |,然后是可能还包含一些数值的描述。因此,当我应用SAS compress函数newvar=compress(oldvar,,'a')时,newvar从oldvar中提取了所有数字。因此,它看起来像12345 | | | |(789)| |等。尽管“|”符号(表示换行等的控制字符)的数量有所不同 我只需要提取“|”符号

所以我的一个变量被编码成了一个混乱的混合数值,文本,括号等等。实际上,我只需要提取记录为12345的数值(例如,不限于特定数量的数字,我的意思是它可以是n-k位到n位),然后是| |,然后是可能还包含一些数值的描述。因此,当我应用SAS compress函数newvar=compress(oldvar,,'a')时,newvar从oldvar中提取了所有数字。因此,它看起来像12345 | | | |(789)| |等。尽管“|”符号(表示换行等的控制字符)的数量有所不同

我只需要提取“|”符号前的第一个数值。需要帮忙吗? 提前感谢。

这应该可以做到:

substr("12345||45||89||...",1,find("|","12345||45||89||...",1)-1)
这应该做到:

substr("12345||45||89||...",1,find("|","12345||45||89||...",1)-1)
使用SCAN()函数提取值。它将产生一个字符值,转换为数字应该很简单

new_var = input(scan(old_var, 1, "|"), best12.);
使用SCAN()函数提取值。它将产生一个字符值,转换为数字应该很简单

new_var = input(scan(old_var, 1, "|"), best12.);

嗨@Gaurav taneja,谢谢你的建议。如果我理解正确,SAS代码应该如下所示:new_var=substr(newvar,1,find(“|”),newvar,1)-1)对吗?我试过了,但没有成功:(Hi@Gaurav taneja,谢谢你的建议。如果我理解正确,SAS代码应该是:new_var=substr(newvar,1,find(“|”),newvar,1)-1)对吗?我试过了,但没有成功:(您应该发布示例数据并指出您拥有、想要和尝试了什么。基于分隔符解析文本的函数应该是SCAN(),但我不确定我是否理解您的问题。您应该发布示例数据并指出您拥有、想要和尝试了什么。基于分隔符解析文本的函数应该是SCAN(),但我不确定我是否理解你的问题。