Arrays 如何在SAS中引用数组变量
我有一个数据集输入,其中有一个名为color的变量,有两种类型:Arrays 如何在SAS中引用数组变量,arrays,string,sas,Arrays,String,Sas,我有一个数据集输入,其中有一个名为color的变量,有两种类型: obs color 1 red 2 red 3 yellow 4 blue ... 现在我想为每种颜色创建标志: DATA COLOR; SET INPUT; ARRAY TYPES [3] RED YELLOW BLUE; FOR I = 1 TO DIM(TYPES) DO; IF COLOR = %unquote(%str(%')TYPES[I].%str(%')) THEN TYP
obs color
1 red
2 red
3 yellow
4 blue
...
现在我想为每种颜色创建标志:
DATA COLOR; SET INPUT;
ARRAY TYPES [3] RED YELLOW BLUE;
FOR I = 1 TO DIM(TYPES) DO;
IF COLOR = %unquote(%str(%')TYPES[I].%str(%')) THEN TYPE[I] = 1;
ELSE TYPE[I] = 0;
END;
RUN;
因此,使用这种方式为数组变量添加引号并不奏效。因为我需要为每种颜色类型创建相同名称的flag,所以我认为作为数组更容易编写。如果您知道如何为数组变量添加引号,请告诉我。这样我就不需要写很多行的IF语句了。当颜色种类太多时。谢谢 对于您的示例来说,数组似乎有些过头了。如果要创建二进制变量,请将布尔表达式的结果指定给这些变量
data want;
set have ;
red = color='red';
blue = color='blue';
yellow = color='yellow';
run;
为了让数组的想法发挥作用,您需要使用VNAME()函数来查找与数组元素对应的变量的名称
data want ;
set have ;
array types red blue yellow ;
do i=1 to dim(types);
types(i)=upcase(color)=upcase(vname(types(i)));
end;
run;
对于您的示例来说,数组似乎有些过头了。如果要创建二进制变量,请将布尔表达式的结果指定给这些变量
data want;
set have ;
red = color='red';
blue = color='blue';
yellow = color='yellow';
run;
为了让数组的想法发挥作用,您需要使用VNAME()函数来查找与数组元素对应的变量的名称
data want ;
set have ;
array types red blue yellow ;
do i=1 to dim(types);
types(i)=upcase(color)=upcase(vname(types(i)));
end;
run;
谢谢成功了。但是它运行的时间比列出所有IF循环要长得多。您知道为什么吗?具有Do循环和多个函数调用的代码应该比仅比较值的代码慢,因为它正在执行更多的操作。因为大多数SAS代码都是I/O,不受CPU限制,所以时钟时间应该不会慢很多。谢谢。成功了。但是它运行的时间比列出所有IF循环要长得多。您知道为什么吗?具有Do循环和多个函数调用的代码应该比仅比较值的代码慢,因为它正在执行更多的操作。由于大多数SAS代码都是I/O,并且没有CPU限制,所以时钟时间不应该慢很多。