我有两个数组,我想在另一个数据上做一个条件。 ARRAY1包含二进制标志(0或1),如果ARRAY1 [i]中的内容为0,我想使第二个数组为空.ARRAY1和ARRAY2具有相同数量的元素。
data test;
set test_data;
array ARRAY1 &variable_flags;
array ARRAY2 $ &variable_list &variable_list_initial_values;
do i=1 to &variable_count;
if ARRAY1[i]=0 then ARRAY2[i]="";
end;
run;
我的输出有效,直到它在ARRAY [i]中达到0。当发生这种情况时,单词后面的列是空白的。我最终得到了像附加图像的东西。为什么会这样?
答案 0 :(得分:0)
数组的初始值仅设置一次。它们不会在数据步骤的每次迭代开始时重新应用。您可以将逻辑更改为具有初始值的另一个数组。我们来制作一些测试数据。
data test_data;
input matt_flg @@ ;
cards;
1 1 0 0 1 1
;
现在让我们根据FLAG变量的值将值设置为默认值或为空。
%let variable_flags=matt_flg;
%let variable_list=matt;
%let variable_list_initial_values="MATT";
%let variable_count=%sysfunc(countw(&variable_list));
%let maxlength=20 ;
data test;
set test_data;
array flags &variable_flags;
array vars $&maxlength. &variable_list ;
array default (&variable_count) $&maxlength. _temporary_ (&variable_list_initial_values);
do i=1 to dim(vars);
if flags(i) then vars(i)=default(i);
else vars(i)=' ';
end;
run;