如何阅读信息数据:$ 1,000.1M至1000.1

时间:2018-02-03 19:59:25

标签: sas informat

数据集包含一系列数字:

    $1,000.1M
      $100.5M
    $1,002.3M
     $23.4M
     $120.3M

我想将变量读作SAS中的数字

结果应该是:

   Money(millions)
   1000.1
   100.5
   1002.3
   23.4
   120.3

我使用COMMAw.d来读取此数据,但无法运行

代码是:

    input Money(millions) COMMA9.1;
    run;

如何修改?

非常感谢!

2 个答案:

答案 0 :(得分:1)

COMMA信息不会指望像'M'这样的字母,它只删除逗号,空格,美元符号,百分号,短划线和近括号。 您可以通过删除不需要的所有字符将原始字符串转换为包含数字的字符串:

data input;
    length moneyRaw $200;    
    infile datalines;
    input moneyRaw $;

    datalines;
$1,000.1M
$100.5M
$1,002.3M
$23.4M
$120.3M
;
run;

data result;
    set input;
   * "k" modifier inverts the removed characters;
    money = input(compress(moneyRaw,"0123456789.","k"),best.);
run;

或者,如果你知道正则表达式,你可以为以后阅读它的人添加一些关于代码的吸引力:

data resultPrx;
    set input;
    moneyUpdated = prxChange("s/^\$(\d+(,\d+)*(\.\d+)?)M$/$1/",1,strip(moneyRaw));
    money = input(compress(moneyUpdated,','),best.);
run;

答案 1 :(得分:0)

我认为你最好把它作为一个角色阅读,然后按照德米特里的回答处理它。但是如果它是一个单独的列你可以读取它,如果你将分隔符设置为M.我怀疑这将在一个演示中起作用,但不是在你的整个过程中。

data input;
    informat moneyRaw dollar8.;    
    infile datalines dlm='M';
    input moneyRaw ;
    *moneyRaw = moneyRaw * (1000000);
    format moneyRaw dollar32.;
    datalines;
$1,000.1M
$100.5M
$1,002.3M
$23.4M
$120.3M
;
run;