如何读取信息数据:$1,000.1M to 1000.1

How to read informats data: $1,000.1M to 1000.1

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

    ,000.1M
      0.5M
    ,002.3M
     .4M
     0.3M

我想在 SAS 中将变量作为数字读取

结果应该是:

   Money(millions)
   1000.1
   100.5
   1002.3
   23.4
   120.3

我用COMMAw.d读取了这个数据,但是不能运行

密码是:

    input Money(millions) COMMA9.1;
    run;

如何修改?

非常感谢!

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

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

    datalines;
,000.1M
0.5M
,002.3M
.4M
0.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,strip(moneyRaw));
    money = input(compress(moneyUpdated,','),best.);
run;

我认为您最好将其作为一个角色来阅读,然后按照 Dmitry 的回答进行处理。但是,如果它是单列,则将分隔符设置为 M 就可以阅读它。我怀疑这将在演示中起作用,但不会在您的整个过程中起作用。

data input;
    informat moneyRaw dollar8.;    
    infile datalines dlm='M';
    input moneyRaw ;
    *moneyRaw = moneyRaw * (1000000);
    format moneyRaw dollar32.;
    datalines;
,000.1M
0.5M
,002.3M
.4M
0.3M
;
run;