如何在SAS中动态选择索引赋值变量?

如何在SAS中动态选择索引赋值变量?,sas,sas-macro,Sas,Sas Macro,我正在尝试在SAS DI中构建自定义转换。此转换将“作用”于输入数据集中的列,生成所需的输出。为了简单起见,我们假设转换将使用input\u col1来计算output\u col1,input\u col2来计算output\u col2,依此类推,直到要操作的指定列数(比如2) 在自定义转换的代码选项部分,用户可以指定(通过提示)要操作的列的名称;例如,用户可以指定input\u col1应该引用输入数据集中名为“order\u datetime”的列,或者为input\u col2制定类似

我正在尝试在SAS DI中构建自定义转换。此转换将“作用”于输入数据集中的列,生成所需的输出。为了简单起见,我们假设转换将使用
input\u col1
来计算
output\u col1
input\u col2
来计算
output\u col2
,依此类推,直到要操作的指定列数(比如2)

在自定义转换的代码选项部分,用户可以指定(通过提示)要操作的列的名称;例如,用户可以指定
input\u col1
应该引用输入数据集中名为“order\u datetime”的列,或者为
input\u col2
制定类似的规范,或者将提示留空

下面是我用来生成自定义转换输出的代码:

data cust_trans;
    set &_INPUT0;

    i=1;
    do while(i<3);
        call symputx('index',i);
        result = myfunc("&&input_col&index");
        output_col&index = result; /*what is proper syntax here?*/
        i = i+1;
    end;
run;
数据客户传输;
设置和输入0;
i=1;

do while(i您不能以这种方式使用依赖于数据变量的宏变量。宏变量在编译时解析,而不是在运行时解析

所以你要么

%do i = 1 %to .. ;
如果您在宏中(它在实际宏之外不起作用),或者需要使用数组,这是很好的

data cust_trans;
    set &_INPUT0;
    array in[2] &input_col1 &input_col2;  *or however you determine the input columns;
    array output_col[2]; *automatically names the results;
    do i = 1 to dim(in);
        result = myfunc(in[i]); *You quote the input - I cannot see what your function is doing, but it is probably wrong to do so;
        output_col[i] = result; /*what is proper syntax here?*/
    end;
run;

我不知道
myfunc
做什么,我也不知道当你把它传递给它时为什么要引用
“&&input\u col&index.”
,但这是一种奇怪的操作方式,除非你想要输入列的名称作为文本(并且不想知道该变量中有什么数据)。如果是,则传递
vname(在[i]中)
将变量的名称作为字符传递。

感谢@Joe给出了非常及时和彻底的答案。这解决了我的问题。至于您关于将名称传递给过程的问题,这部分是为该问题制作了一个最简单的工作示例的人工制品,部分是因为该过程实际上要求表和列名。不重要。再一次,非常感谢!