我正在尝试使用数组来创建新变量(例如年复一年和周变化)。我想保留一个命名约定,以便我说“订单”,然后使用数组生成“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;
答案 0 :(得分:2)
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;
现在,您可以根据现有名称定义数组。
答案 1 :(得分:1)
因此,您无法在数据步骤中动态修改数组变量名称。数据步骤编译发生时必须知道变量名称。
您有两种选择:
首先,您可以创建第二个数组:
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变量。如果您需要经常更改变量列表和/或在运行程序(它是数据驱动的)之前您不知道列表,这更合适。如果是这种情况,您应该发布有关如何确定列表以获得有用响应的更多信息。