【问题标题】:Converting multiple variables in SAS from 0/1 to 'Yes'/'No'将 SAS 中的多个变量从 0/1 转换为“是”/“否”
【发布时间】:2019-06-05 13:25:18
【问题描述】:

我有兴趣使用循环将以下 SAS 数据集中的以下变量从 0/1 转换为“是”/“否”:

Person       Variable1       Variable2       Variable3     Variable4  ... Variable36
001          0               1               0             1              0
002          1               1               0             0              0
003          0               0               1             1              1

理想情况下,我希望保留相同的变量名称。任何见解将不胜感激。

【问题讨论】:

  • 您真的想要新的变量来表示是或否吗?还是格式没问题?我建议使用格式,因为这会改变数据的外观,但不会改变基础数据。在尝试进行汇总计算(例如是/否的百分比,即 0/1 变量的平均值)时,将数据保持为 0/1 有很多好处。

标签: arrays loops sas


【解决方案1】:

最简单的方法是使用proc format

proc format library=work;
    value myformat 1='Yes'
                   0='No';
run;

data want;
format variable: myformat.;
set have;
run;

在这种情况下,我们只是将格式 myformat 分配给以 variable 开头的任何内容。冒号是通配符。请注意,这不会改变变量的实际值。如果您运行proc contents,您将看到变量仍然是数字。

【讨论】:

    【解决方案2】:

    如果您真的想将它们全部转换为字符,您可以使用 PROC TRANSPOSE。当您用字符变量转置数值变量时,所有变量都将转换为字符。这也将保留变量标签,但您可能需要为此添加 IDLABEL 语句。这种技术不能很好地扩展。

    data have;
       input Person:$3. Variable1-Variable5;
       retain dummy '13';
       cards;
    001          0               1               0             1              0
    002          1               1               0             0              0
    003          0               0               1             1              1   
    ;;;;
       run;
    proc format; value yn 0='No' 1='Yes';
       run;
    proc print;
       run;
    proc transpose data=have out=t1;
       by person;
       var Variable: dummy;
       format variable: yn3.;
       run;
    proc transpose data=t1 out=want(drop=_name_);
       where upcase(_name_) ne 'DUMMY';
       by person;
       var col1;
       run;
    proc contents varnum;
    proc print;
       run;
    

    【讨论】:

    • 谢谢。不幸的是,当我使用这种方法时,我似乎丢失了一些行。这能够处理空/空值吗?
    • @statsguyz 不幸的是,“看起来”并不是一个有用的诊断。您是否运行了缺少值的示例?
    • 我添加了空值,您的代码保留了主题。不知道为什么我会丢失行。
    • 显示您的代码。您是否有对本主题很重要的日志消息?
    • 没有指示任何问题的日志消息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多