我想从SAS中的字符串变量中仅提取最后两个数值

时间:2014-12-29 05:37:26

标签: string numbers sas

我想从字符串变量中仅提取最后两个数值并将其分配给新变量。首先,我使用下面的代码从字符串中提取所有数值并将其分配给一个新变量,但我最终只想提取最后两个数值,所以有更好的方法来做到这一点。

UI_DUM = input(compress(Prod_Desc,,"kd"),best.);

还有一个问题是:如何在SAS中为一些manupulation工作分配一个临时变量?

2 个答案:

答案 0 :(得分:1)

这是代码。 你做得对,删除字符,只保留数字。变量“temp1”也是如此(在下面的代码中)。 在第二步中,使用length函数计算现在仅包含数字的字符串的总长度。在第三步中使用substr函数提取最后两位数字。 如果你想在一个声明中做到这一点,那么“最终”变量就是答案。


  • LENGTH函数 - 返回非空字符串的长度,不包括 尾随空格,并返回1表示空白字符串
  • 带有“compress”选项的
  • kd功能 - 只保留数字。

    COMPRESS(<,chars><,modifiers>)

    修饰符 - 指定字符常量,变量或表达式,其中每个非空白字符都会修改COMPRESS函数的操作。空白被忽略了。以下字符可用作修饰符。

    d或D将数字添加到字符列表中。

    k或K将字符保留在列表中而不是删除它们

  • substr function - 从参数中提取子字符串 - SUBSTR(字符串,位置<,长度>)


data _null_;
Test_string="ada13117a1w11da1286s";
temp1=compress(Test_string, , 'kd');
temp2=length(temp1);
temp3=substr(temp1,temp2-1,2);
final=substr(compress(Test_string, , 'kd'),length(compress(temp1))-1,2);
put _all_;
run;

关于临时变量,SAS中没有这样的变量。只需使用任何变量名称,并在最终数据集中使用drop语句,如下所示;

data test(drop = temp); /*Would work as the temp variable*/
temp= 2*balance;/*just for example*/
/*use the temp in further calculations*/
run; 

答案 1 :(得分:0)

有点不同:

data want;
  set have;
  UI_DUM = input(compress(Prod_Desc,,"kd"),best.);
  UI_DUM_last2 = mod(UI_DUM,100);
run;

你也可以在一行中完成所有这些。这使用数字模数函数简单地给你最后2位数字(任何数字模数100将返回最后2位数字。)