创建具有条件的矩阵

时间:2014-09-24 16:29:06

标签: matrix sas

我正在努力根据某些条件在SAS中创建两个矩阵。

尝试使用以下格式创建12x12矩阵:

col1 col2 col3 col4 ............col12
1     0    0    0   ............  0
1     1    0    0   ............  0
1     1    1
0     1    1
0     0    1
1     0    0
1     1    0
1     1    1
0     1    1
0     0    1
0     0    0
0     0    0

等等。

和 -

col1 col2 col3 col4 ............col12
 1     0    0    0   ............  0
 1     2    0    0   ............  0
 1     2    3
 0     2    3
 0     0    3
 1     0    0
 1     2    0
 1     2    3
 0     2    3
 0     0    3
 0     0    0
 0     0    0

等等。基本上显示col#而不是1#。

我在线阅读了几篇文章并尝试了Proc IML,但是我得到了一个错误,该程序并不存在。 我尝试下面的代码开始但没有。我对如何输入条件感到困惑。

data test_matrices ;
 array col(12) col1-col12;
do i=1 to 12;
 j=i-1; 
col(i)=ifn(i le 5 , 1, 0,0);
output;
end;
run;

请帮忙。

感谢。

2 个答案:

答案 0 :(得分:0)

您需要从什么开始:

  • 数组必须有一个名称,除非它们是临时数组,否则它们还需要变量名(如果不提供,它们将使用与数组索引连接的名称)。所以:

    array(*)1-12;

需要

array myVars(12) col1-col12;
  • 您需要两个循环,一个用于定义“行”,另一个用于嵌套。对于第1行,I​​E执行12次,对于第2行,执行12次操作。

所以这个:

do i=1 to 12;
 do j=1 to 12;
  ... do stuff ...
 end;
 output; *you had this right!  It goes in the outer loop since it defines rows.;
end;
  • 现在,你有一些东西可以让你只在一个单元格上工作。所以你在小区(i,j);什么规则定义应该去哪里?弄清楚那个逻辑,然后将myvars [j]设置为该值。你不能对“i”参数进行操作,而只是定义你输出的频率。

即,这个:

myvars[j] = i;

这不正确,但弄清楚什么是正确的并将其分配给myvars [j]。

答案 1 :(得分:0)

谢谢乔!我感谢你的指导。 下面是2 1s 0和2 1s的代码。

data test_matrices ;
array col(12) col1-col12;
do i=1 to 12;
do j=1 to 12;
col[j]= ifn((j-i ge 1) or (i-j=2)  or (j > 8) or (i-j ge 5) , 0, 1);
end;
output;
end;
run;