1

数据集包括一个数字列表:

    $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;

如何修改它?

非常感谢!</p>

4

2 回答 2

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;
于 2018-02-03T20:37:45.687 回答
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;
于 2018-02-05T20:35:39.957 回答