Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 过去5个TRN中的特定交易数_Sql_Sas_Proc Sql_Datastep - Fatal编程技术网

Sql 过去5个TRN中的特定交易数

Sql 过去5个TRN中的特定交易数,sql,sas,proc-sql,datastep,Sql,Sas,Proc Sql,Datastep,我想写sas代码(proc sql)。问题是如何创建变量VP_Trans(见下表)。下表是指某一时期内的客户交易。 我想根据客户最近5笔交易计算其VP交易的数量。包括第五笔交易 e、 g.客户1有5笔VP交易,根据1.2至11.2之间发生的交易计算 +---------+-------------+-----------+----------+ | cust id | Trans Dates | TransType | Vp_Trans | +---------+-------------+--

我想写sas代码(proc sql)。问题是如何创建变量VP_Trans(见下表)。下表是指某一时期内的客户交易。 我想根据客户最近5笔交易计算其VP交易的数量。包括第五笔交易 e、 g.客户1有5笔VP交易,根据1.2至11.2之间发生的交易计算

+---------+-------------+-----------+----------+
| cust id | Trans Dates | TransType | Vp_Trans |
+---------+-------------+-----------+----------+
|       1 | 2015-02-01  | VP        | NA       |
|       1 | 2015-02-03  | Vp        | NA       |
|       1 | 2015-02-06  | VP        | NA       |
|       1 | 2015-02-06  | Vp        | NA       |
|       1 | 2015-02-11  | Vp        | 5        |
|       1 | 2015-02-13  | MG        | 4        |
|       1 | 2015-02-17  | Vp        | 4        |
|       1 | 2015-02-18  | mg        | 3        |
|       1 | 2015-02-19  | mg        | 2        |
|       1 | 2015-02-20  | mg        | 1        |
|       1 | 2015-02-21  | vp        | 2        |
|       2 | 2015-02-01  | VP        | NA       |
|       2 | 2015-02-03  | mg        | NA       |
|       2 | 2015-02-06  | mg        | NA       |
|       2 | 2015-02-06  | Vp        | NA       |
|       2 | 2015-02-11  | Vp        | 3        |
|       2 | 2015-02-13  | MG        | 2        |
|       2 | 2015-02-17  | Vp        | 3        |
|       2 | 2015-02-18  | mg        | 3        |
|       2 | 2015-02-19  | mg        | 2        |
|       2 | 2015-02-20  | mg        | 1        |
|       2 | 2015-02-21  | mg        | 1        |
|       2 | 2015-02-22  | mg        | 0        |
+---------+-------------+-----------+----------+

如果您的DBMS支持窗口聚合,则这是一个简单的移动计数:

select
   cust_id, Trans_Dates, TransType,
   count(case when TransType = 'VP' then 1 end)
   over (partition bycust_id
         order by Trans_Dates
         rows 4 preceding) as Vp_Trans
from tab

使用5元素数组跟踪type='VP'的检查。使用
MOD()
函数实现环绕索引。以下是您的示例数据:

data have ;
 input id Date Type $ Expected ;
 informat date yymmdd10.;
 format date yymmdd10.;
cards;
 1 2015-02-01 VP .
 1 2015-02-03 Vp .
 1 2015-02-06 VP .
 1 2015-02-06 Vp .
 1 2015-02-11 Vp 5
 1 2015-02-13 MG 4
 1 2015-02-17 Vp 4
 1 2015-02-18 mg 3
 1 2015-02-19 mg 2
 1 2015-02-20 mg 1
 1 2015-02-21 vp 2
 2 2015-02-01 VP .
 2 2015-02-03 mg .
 2 2015-02-06 mg .
 2 2015-02-06 Vp .
 2 2015-02-11 Vp 3
 2 2015-02-13 MG 2
 2 2015-02-17 Vp 3
 2 2015-02-18 mg 3
 2 2015-02-19 mg 2
 2 2015-02-20 mg 1
 2 2015-02-21 mg 1
 2 2015-02-22 mg 0
;;;;
以下是计算VP_TRANS的数据步骤

data want ;
   do n=1 by 1 until (last.id);
      set have ;
      by id date ;
      array flags (5) ;
      flags(mod(n,5)+1)= upcase(type)='VP';
      if n>= 5 then VP_trans=sum(of flags(*));
      output;
  end;
  drop flags: ;
run;
proc print; run;

使用SAS proc sql获取最后五个事务非常痛苦。如果您使用的是另一个数据库,请使用数据步骤或本机查询。数据步骤将非常好。SAS SQL不支持窗口聚合。@Reeza:当然不支持,但您的DBMS可能会使用显式SQL传递(&U)&您可以使用显式SQL传递