将 excel 中的数据读入 SAS 并将字符转换为数字

reading data from excel into SAS and converting character to numeric

我正在从 SAS 中的 excel 文件读取数据并将值插入到 oracle table。 oracle table 有一个数字列。如果 excel 文件有数字,它工作正常。但是如果该列在 excel 文件中留空,它被读取为字符值并且插入到 oracle 失败。

是否可以将列为空白的列转换为数字,但如果列有数字则按原样读取?

谢谢!

我们假设 SAS 将此列作为字符读取,您不能在文件中直接转换它。有时会发生这种情况:也许您没有这样做的授权,或者它可能没有像您期望的那样工作。 SAS 可以使用两个函数从字符到数字和数字到字符:input()put().

从字符到数字:input()

input() 用于将字符数据in转换为数字。

这非常适合读取日期、货币、comma-separated 数字等。如果您需要数字数据,请使用此功能。它的语法是:

num_var = input(char_var, informat.);

在你的情况下,假设我们总是希望数字在这里,即使它丢失了。我们将使用 8. 信息作为我们感兴趣的变量,my_var.

data want;
    set have_excel(rename=(my_var = my_var_char) );
    
    my_var = input(my_var_char, 8.);
    
    drop my_var_char;
run;

请注意,我们需要创建一个新变量。我们将感兴趣的变量重命名为其他名称,然后创建一个新版本的感兴趣变量,即数字。在 SAS 中,就像许多其他语言和数据库系统一样,当变量被声明为字符或数字时,它总是一个字符或数字。

从数字到字符:put()

put() 用于 put 将一个数字转换为一个字符或将一个字符转换为另一个字符。

这对于将 SAS 日期转换为字符、添加自定义格式、将一个字符转换为另一个字符等非常有用。语法是:

char_var = put(num_var, format.);

或:

char_var = put(char_var, format.);

注意前面的用例:使用 put(),您可以将字符转换为其他字符。这对于标准化值甚至使用格式合并数据非常方便。

例如:让我们将数字转换为 comma-separated 个字符数字。

data want;
    char_number = put(1234, comma.);
run;

输出:

char_number
1,234

下面的案例陈述对我有用。

case 
when missing(input(cats(COLUMN_VALUE), best8.)) THEN input(cats(COLUMN_VALUE), best8.) 
when not missing(input(cats(COLUMN_VALUE), best8.)) THEN input(cats(COLUMN_VALUE), best8.) 
end as COLUMN_VALUE