从字符到数字的转换不起作用

问题描述 投票:0回答:1

我有一个包含 50 列的表,其中 25 列被转换为字符,因为数值中有 NA 值,其余实际上是字符列。 首先,我尝试将 NA 更改为“.”。然后我请求从 CHAR 到 NUM 的转换。我使用 SAS 宏来帮助我,所以我不需要将每个列名都输入到语句中。 即使尝试了 3 种不同的方法来转换它,每次我检查表或使用 proc 内容来查看结果时,列仍以 CHAR 形式继续。 LOG 显示“已完成编译且没有错误”。 下面我简化了代码:

没有宏的第一次尝试:

DATA Report1_NEW;
SET Report1;
if 'NA' THEN '.';
END;
RUN;

DATA Report1_NEW;
SET Report1;
NUM_change = INPUT((col1, col2, col3, ..., col25),?comma9.);
RUN;

第二次尝试宏:

%let Num_col = col1, col2, col3, ..., col25;
%macro Report1;

DATA Report1_NEW;
SET Report1;
    array &Num_col;
        do over &Num_col;
        if &Num_col='NA' then &Num_col='.';
        end;
run;

DATA Report1_NEW;
SET Report1;
Value_&Num_col = INPUT(&Num_col,?comma9.);
RUN;

%mend Report1;

第三次尝试宏:

%let Num_col = col1, col2, col3, ..., col25;
%macro Report1;

DATA Report1_NEW;
SET Report1;
    array &Num_col;
run;

PROC FORMAT;
INVALUE (&Num_col);
'NA'='.';
RUN;

DATA Report1_NEW;
SET Report1;
Value_&Num_col = INPUT(&Num_col,?comma9.);
RUN;

%mend Report1;

我希望一旦列被转换为 NUMERIC,之后我就可以用其中的一些进行计算。

我是 SAS 的新手,非常感谢您的帮助。 谢谢!

sas number-formatting data-conversion sas-macro
1个回答
0
投票

所以你的前两次尝试没有使用有效的 SAS 代码。

在第一个

if 'NA' THEN '.';
END;

IF中的条件其实不是布尔表达式。 THEN 之后没有语句,只有一个值。你有一个没有结束任何事情的结束。

在第二个中,您错误地使用了 INPUT() 函数。

NUM_change = INPUT((col1, col2, col3, ..., col25),?comma9.);

您只能给 INPUT() 函数两个参数。要读取的字符串和用于读取它的信息。

你的第三次尝试也好不到哪里去,你已经添加了尝试使用宏语言生成代码的复杂性。

但是没有必要求助于CODE GENERATION对一系列变量执行相同的操作。这就是 ARRAY 概念的目的。

data Report1_NEW;
  set Report1;
  array chars col1-col25 ;
  array nums  newcol1-newcol25 ;
  do index=1 to dim(chars);
     nums[index] = input(chars[index],??comma32.);
  end;
  drop index ;
run;

如果您的实际变量名称未使用数字后缀命名,如 COL1、COL2 等,则只需在两个数组语句中列出以空格分隔的名称。确保两个列表中的名称数量相同。确保 NUMS 数组中的名称尚未被输入数据集中的其他变量使用。

© www.soinside.com 2019 - 2024. All rights reserved.