SAS - 创建具有滞后的不同自变量的组合 [英] SAS - Creating combinations of different independant variables with lags

查看:24
本文介绍了SAS - 创建具有滞后的不同自变量的组合的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想在使用变量名称(例如 VarA、VarB、VarC)形成的数据集(在 SAS 中)中创建动态条目,每个条目的滞后最大为 4.

I'd like to create dynamic entries in a data set (in SAS) formed using the names of variables (e.g. VarA, VarB, VarC) each having lags up to 4.

输入数据集有这个信息(列名是变量和值):

The input data set HAVE has this information (the column names are Variables and Values):

Variables Values

VarA          0

VarB          0

VarC          0

Lags          4

并且输出数据集 WANT 应该如下所示(Var1、Var2 和 Var3 是动态列名,即将 1,2,3 附加到任何字符串 Var)

and the output data set WANT should be something like below (Var1, Var2, and Var3 are dynamic column names i.e. appending 1,2,3 to any string Var)

Var1     Var2      Var3

VarA     VarB      VarC 

VarA1    VarB1     VarC1

..

VarA4    VarB4     VarC4

目的是让这项工作适用于 HAVE 数据集中的任意数量的变量.

The intention is to have this work for any number of variables in HAVE data set.

谢谢

推荐答案

以下代码返回您想要的内容.请根据您的需要进行修改.

The following code returns what you want. Please modify according to your needs.

/*sample input dataset*/
data have;
input Variables $ Values;
datalines;
VarA 0
VarB 0
VarC 0
Lags 4
;
run;
/*get the no. of lags form the input dataset*/
proc sql noprint;
select Values into :num_of_lags from have where upcase(variables)='LAGS';
quit;
/*transpose the input dataset such that the VarA, VarB, VarC are put in columns Var1, Var2, & Var3 respectively*/
/*have_t, the transposed dataset only has 1 row.*/
proc transpose data = have out =  have_t(drop = _name_) prefix = var;
where upcase(variables)  ne 'LAGS';
var variables;
run;
/*replicate the 1 row in have_t num_of_lags times*/
data pre_want;
    set have_t;
    array myVars{*} _character_;
        do j= 1 to &num_of_lags+1;
            do i = 1 to dim(myVars);
            myVars[i]=myVars[i];
            end;
        output;
    end;
run;
/*final dataset*/
data want;
set pre_want;
array myVars{*} _character_;
if _N_>1 then do;
do i = 1 to dim(myVars);
        myVars[i]=compress(myVars[i]!!_n_-1);
    end;
end;
drop i j;
run;
proc print data = want; run;

输出:

var1  var2  var3 
VarA  VarB  VarC 
VarA1 VarB1 VarC1 
VarA2 VarB2 VarC2 
VarA3 VarB3 VarC3 
VarA4 VarB4 VarC4 

这篇关于SAS - 创建具有滞后的不同自变量的组合的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆