我正在寻找一种方法将字符转换为SAS中的数字,以便我可以使用max函数。此外,如果保留字符和仅保留数字,将会很有帮助。下面是SAS表中列的数据列表。
列UNK
abc20140714
abc20140714x
abc20140714xyz
123_abc20140714_xyz
abc20150718
在从列中删除数值后,我会对数据进行分组并使用SAS中的max函数,该函数只应生成值20150718.
为了避免任何混淆,我的问题是,有没有办法去除非数字值,然后将列转换为数字列,以便我可以使用max函数?
感谢。
答案 0 :(得分:4)
当然!
var_num = input(compress(var_char,,'kd'),yymmdd8.);
压缩从列表中删除或保留字符。 'kd'
说要保留数字'
然后使用适当的信息输入;根据您提供的数据,yymmdd8.
看起来正确。然后应用格式format var_num yymmdd8n.;
或类似格式,以便它看起来像一个视觉日期(即使它真的是一个数字在下面)。
正如所指出的,如果值中有其他数字,这将不起作用;您需要查看数据并确定这些数据的显示方式并单独清除它们。例如,您可以使用正则表达式来标识具有8个连续数字的事物,从20开始;但最终这是一个数据分析问题,可以根据您的数据需要处理这些问题。
答案 1 :(得分:1)
要获得以1或2作为数值开头的第一个8位数字序列,您可以使用以下内容:
data want;
set have;
pos = prxmatch("/[12]\d{7}/", character_string);
if pos > 0 then number = input(substr(character_string, pos, 8), 8.);
else number = .;
drop pos;
run;
prxmatch表达式查找序列的起始位置,substr表达式提取序列,然后输入函数将其转换为数字。
(编辑以结合Joe的反馈)