Matrix 创建具有条件的矩阵

Matrix 创建具有条件的矩阵,matrix,sas,Matrix,Sas,基于某些条件,我正在努力在SAS中创建两个矩阵 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; 尝试按以下格式创建12x12矩阵: col1 col2 col3 col4 ............col12 1 0 0 0 ............ 0 1 1 0

基于某些条件,我正在努力在SAS中创建两个矩阵

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;
尝试按以下格式创建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
等等。基本上显示列而不是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;
请帮忙

谢谢


Jay

您需要从以下内容开始:

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

    阵列(*)1-12

需要

array myVars(12) col1-col12;
  • 您需要两个嵌套的循环,一个用于定义“行”,另一个用于处理列。例如,对于第1行,做某事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]。

谢谢你,乔!我感谢你的指导。 下面是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;

IML是一个独立的许可证,因此您可能没有许可/安装它(这就是“不存在”的意思)。我只是想提一下。但我还有别的办法吗?谢谢,除非这是一个SQL问题,否则您也应该去掉标记。不要仅仅用它来表示您可以使用SQL解决方案;SAS用户了解PROC SQL的存在。谢谢Joe!我没有添加另一个循环doj=1到12,因为它会创建144行。我正处于一个阶段,我可以填充1和0,但仍然无法获得正确的条件,在那里我可以有2个1个0,然后是2个1。输出需要在外循环中。但是,您仍然需要两个循环,除非将列值设置为1的条件更简单-您永远不会解释该条件是什么。第一个矩阵的条件是col1,row1值应该是1第一个矩阵的条件是矩阵(x,y),如果x=y,则该列的第一个1。然后是10,然后是1和1。上面提到的第一个例子表明。因此,每列的模式应该是1,0,1,当x=y时,第一个1开始。我希望这是有道理的。这与你在问题中的答案不符,所以,不,你有1,1,1,0,0,1,1。