我正在尝试使用一个数组来创建新的变量(比如每年的变化和每周的变化)。我希望保持一个命名约定,这样我就可以指定"orders“,然后使用数组来生成"orders_LY”和"orders_LW“
这个可以工作(来自下面的代码)
LW=lag1(figures{i});尽管这不是我想要的,
这个不是
figures{i}_LY=lag53(figures{i});
data summary_&type._&date.;
set summary;
array figures {5} tv_total_orders_&type. tv_total_bookings_&type. TV_AOV_&type. total_orders_&type. total_bookings_&type. ;
do i=1 to 5;
LW=lag1(figures{i});
figures{i}_LY=lag53(figures{i});
end;
run;发布于 2016-08-05 00:11:42
Joe是正确的,因为您不能动态地定义它们,但是您可以单独创建所需的结构,然后基于现有结构定义数组。下面是一个例子:
创建一些我们想要添加后缀的变量:
data fields;
length field $50;
input field $;
datalines;
orders
sold
billed
cost
gp
;
run;添加后缀:
data config;
length new_name $50;
set fields;
new_name = field; output;
new_name = cats(field,'_LW'); output;
new_name = cats(field,'_LY'); output;
dummy=1;
run;转置它以获得作为列名的后缀变量:
proc transpose data=config out=trans(drop=_name_);
id new_name;
var dummy;
run;现在,您可以基于现有名称定义数组。
发布于 2016-08-04 23:06:24
因此,您不能在数据步骤中即时修改数组变量名称。在进行数据步骤编译时,必须知道变量名。
您有两个选项,然后:
首先,您可以创建第二个数组,如下所示:
figures_ly {5} tv_total_orders_&type._ly tv_total_bookings_&type._ly TV_AOV_&type._ly total_orders_&type._ly total_bookings_&type._ly ;(您可能需要进行变量属性初始化,我不知道您的数据。)如果您在进行编程时知道需要什么,并且变量列表不会更改,那么这是最好的。
其次,您可以使用宏语言来定义这些LY变量。如果您需要经常更改变量列表,并且/或者直到运行程序(它是数据驱动的)才知道列表时,这更合适。如果是这样的话,你应该发布更多关于如何确定列表以获得有用响应的信息。
https://stackoverflow.com/questions/38765282
复制相似问题