使用SAS数组创建带后缀的新变量

时间:2016-08-04 10:49:15

标签: arrays sas

我正在尝试使用数组来创建新变量(例如年复一年和周变化)。我想保留一个命名约定,以便我说“订单”,然后使用数组生成“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;

2 个答案:

答案 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变量。如果您需要经常更改变量列表和/或在运行程序(它是数据驱动的)之前您不知道列表,这更合适。如果是这种情况,您应该发布有关如何确定列表以获得有用响应的更多信息。