【发布时间】:2015-12-15 17:27:08
【问题描述】:
我有一个宏,它接受一维数组作为参数。我想将二维数组的一维传递给它,但我不知道如何干净地引用二维数组的一维来生成一个新的一维数组。我确定我缺少一些明显的东西,但我找不到它。
以下是我编写的一些测试代码,用于尝试引用“myVals”的一维。
data test;
array myVals {3,4} myVal1_1 - myVal1_4
myVal2_1 - myVal2_4
myVal3_1 - myVal3_4;
do i = 1 to 3;
do j = 1 to 4;
myVals{i,j} = j - i + 3;
end;
end;
array newArray {*} myVals{1}; *All of these throw errors;
array newArray {*} myVals[1];
array newArray {*} myVals(1);
array newArray {*} myVals{1,};
len2ndDim = dim2(myVals); *this produces a column with value 4;
array newArray {len2ndDim}; *this throws error for "len2ndDim" not being an integer constant or *;
run;
编辑汤姆的评论 我希望能够创建一个命名数组 newArray,根据数据步循环变量是 1,2 还是 3,它可以别名为:
- 变量 myval1_1 - myVal1_4 或
- 变量 myVal2_1 - myVal2_4 或
- 变量 myVal3_1 - myVal3_4
然后我会调用 myMacro,它需要三个参数 - 名称、开始索引、结束索引。我会这样打电话:
- myMacro(newArray, 1, myEndIndex1) 或
- myMacro(newArray, 1, myEndIndex2)
【问题讨论】:
-
为什么?请记住,ARRAY 语句只是定义了一个别名,您可以使用它来引用多个变量,它实际上并没有创建一个数组数据结构。
-
嗨,Tom,我想要一个别名,用于将二维数组的某个维度传递给接受一维数组的宏。
-
您当前如何将数组作为参数传递?你如何看待通过一维?您的意思是要传递一个数字并将该数字解释为数组维度之一的索引吗?如果是这样,为什么不在 DATA 步骤代码中的数组引用中引用宏变量?
myvals[&dim1,K] -
我有像上面的 myVal1_1 到 myVal3_4 这样的变量。我有一个来自 1-3 的 N 数据步循环(我定义的二维数组的第一个维度),对于每个 N 1,2 和 3,我想调用一个宏传递 ..N_1, ...N_2, 。 ..N_3 和 ...N_4 到一个宏。该宏接受数组的名称和开始/结束索引。因此,如果我可以从二维数组的第 N 维中创建一个新的数组别名,我可以将该数组名称传递给这个宏。传递 myvals[&dim1,K] 一次传递一个值,但我想传递一个可以对许多变量执行逻辑的数组名称。
-
你能举个例子吗?我没有看到宏参数与您希望宏生成的数据步骤代码有何关联。如果我想将多个值传递给宏,那么我通常将其作为空格分隔列表来执行。因此,如果我有一个名为
LIST的参数,我可以使用LIST=1 3 6 7调用宏。然后我可以使用%sysfunc(countw(&list))找出4值已通过。
标签: arrays multidimensional-array sas