根据格式化的数字变量创建一个新的命名列

时间:2020-03-25 04:27:18

标签: sas

我有一个由格式化数字变量组成的数据集(DIN)(例如,第1列“ BLD”的值为1-3,但它们的格式为“是”,“否”,“未知”)。所有列的格式略有不同。

在每一行中,只有一列具有值,其余列均缺失。我正在尝试使用以下内容来获取每一行的最大值(它将始终是非缺失值)

data DIN;
    set DIN;
    MAX = max(of BLD--VASC);
run;

不幸的是,由于这些列是数字,因此MAX列显示为数字,而不是格式值。我尝试使用vvalue来获取格式化值,如下所示,但我不知道如何一次对所有列进行格式化。

data _null_;
    set DIN;
    BLD_C = vvalue(BLD);
run;

我觉得do循环可能会有所帮助,我尝试循环遍历变量名数组,但这是行不通的。似乎什么都没发生

data DIN_C;
    set DIN;
    array nums(*) _numeric_;

    do i = 1 to dim(nums);
        nums_C = vvalue(nums(i));
    end;
run;

有人可以帮助我吗?还是我可以针对这个问题采取另一种方法?

1 个答案:

答案 0 :(得分:2)

您可以使用MAX()查找实际的不丢失数字值。然后使用WHICH()查找具有该值的变量的索引号。现在,您可以使用VVALUE()查找该变量的格式化值。

data DIN_FIXED;
  set DIN;
  array _num BLD--VASC
  length max 8 max_formatted $50 ;
  MAX = max(of _num[*]);
  if not missing(max) then max_formatted=vvalue(_num[which(max,of _num[*])]);
run;
相关问题