具有条件的SAS的多动态数组

时间:2016-11-04 15:00:45

标签: arrays sas

我有两个数组,我想在另一个数据上做一个条件。 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。当发生这种情况时,单词后面的列是空白的。我最终得到了像附加图像的东西。为什么会这样?

enter image description here

1 个答案:

答案 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;