gpt4 book ai didi

type-conversion - SAS : Convert character to numeric without creating another variable

转载 作者:行者123 更新时间:2023-12-03 01:15:36 25 4
gpt4 key购买 nike

我想将 x 转换为数字。

DATA test;
input x $1.;
cards;
1
2
0
;
run;

我尝试了不同的方法:

  • 使用*1:

    /* trial1 */
    DATA test1;
    SET test;
    x = x*1;
    run;

日志打印以下注释:

NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
2470:3
NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
2470:4

并且格式不会改变。

  • 使用input():

    /* trial2 */
    DATA test2;
    SET test;
    x = input(x,BEST1.);
    run;`

日志打印以下注释:

NOTE: Numeric values have been converted to character values at the places given by: (Line):(Column).
2396:3

并且格式不会改变。

  • 使用信息:

    /* trial3 */
    DATA test3;
    SET test;
    informat x BEST1.;
    run;

日志打印以下错误:

ERROR 48-59: The informat $BEST was not found or could not be loaded.

对此进行了解释herehere :编译器检测到变量和格式的不同类型,假设这是一个错误,添加假定缺失的 $,因此找不到格式。

如果我创建第二个变量,所有这些试验都会起作用,例如:

DATA test4;
SET test (rename=(x=x2));
x = x2*1;
drop x2;
run;

但是我正在尝试清理我的代码,我想知道是否有一种方法可以在不这样做的情况下进行此类转换?

最佳答案

正如其他地方所指出的,您确实需要使用第二个变量。 SAS 不会让您直接更改列的变量类型,但您可以通过与上面类似的方式使用重命名来进行欺骗。

我要建议的与 NEOmen 的答案或您上面的答案不同的一件事是使用 input。长度/赋值或使用 *1 方法都可以,但它们依赖于 SAS 的自动类型转换,这会在日志中添加一条说明,表明它正在执行此操作。您应该避免在日志中出现类似的内容,因为它们很困惑,会让其他人认为您可能是无意中完成的。

使用 NEOmen 的测试数据集:

data test1;
set test(rename=x=x_old);
x=input(x_old,best12.); *whatever is appropriate informat for your variable;
run;

关于type-conversion - SAS : Convert character to numeric without creating another variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27689318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com