SAS将字符/数字转换为数字

时间:2014-07-30 20:43:20

标签: sas

我正在寻找一种方法将字符转换为SAS中的数字,以便我可以使用max函数。此外,如果保留字符和仅保留数字,将会很有帮助。下面是SAS表中列的数据列表。

列UNK
abc20140714
abc20140714x
abc20140714xyz
123_abc20140714_xyz
abc20150718

在从列中删除数值后,我会对数据进行分组并使用SAS中的max函数,该函数只应生成值20150718.

为了避免任何混淆,我的问题是,有没有办法去除非数字值,然后将列转换为数字列,以便我可以使用max函数?

感谢。

2 个答案:

答案 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的反馈)