Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.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
SAS日期跟踪_Sas - Fatal编程技术网

SAS日期跟踪

SAS日期跟踪,sas,Sas,我有以下数据集,如果到期日-后续发行日期介于0和1之间,我希望获得展期交易的最终到期日,然后将其视为展期交易。 请告知如何在SAS中编写编码,以从到期日获取最终到期日_1 Number Amount Issue_Date Maturity_Date Maturity date_1 Remarks 1 10000 29-Sep-16 28-Oct-16 24-Apr-17 Roll over 2 10000 28-Oct-16

我有以下数据集,如果到期日-后续发行日期介于0和1之间,我希望获得展期交易的最终到期日,然后将其视为展期交易。 请告知如何在SAS中编写编码,以从到期日获取最终到期日_1

Number  Amount  Issue_Date  Maturity_Date   Maturity date_1 Remarks
1       10000   29-Sep-16   28-Oct-16       24-Apr-17       Roll over
2       10000   28-Oct-16   28-Nov-16                       Roll over from 1
3       10000   28-Oct-16   28-Nov-16       28-Nov-16       Distinct Transaction
4       10000   28-Nov-16   29-Dec-16                       Roll over from 2
5       10000   29-Dec-16   27-Jan-17                       Roll over from 4
6       10000   26-Jan-17   27-Feb-17                       Roll over from 5
7       10000   27-Feb-17   24-Mar-17                       Roll over from 6
8       10000   24-Mar-17   24-Apr-17                       Roll over from 7

提前感谢

您可以在单个数据步骤中完成此操作;使用保留功能。 在我下面的解决方案中:

我保留了上一条记录的值来计算0或1, 最后,我将最终到期日保存在一个宏变量中,然后仅更新第一条记录。 解决方案:

数据准备和格式:

data have;
length number 8. Amount 8. Issue_Date $9. Maturity_Date $9.   ;
input Number  Amount  Issue_Date $ Maturity_Date $  ;

datalines;
1       10000   29-Sep-16   28-Oct-16   
2       10000   28-Oct-16   28-Nov-16    
3       10000   28-Oct-16   28-Nov-16       
4       10000   28-Nov-16   29-Dec-16     
5       10000   29-Dec-16   27-Jan-17    
6       10000   26-Jan-17   27-Feb-17      
7       10000   27-Feb-17   24-Mar-17     
8       10000   24-Mar-17   24-Apr-17     
;
run;

proc sql; 
create table have_dates as select
number, amount,input(Issue_Date,date9.)as Issue_Date format=date9.,  input(Maturity_Date,date9.) as Maturity_Date format=date9.,
. as Maturity_date_1 format=date9. ,"" as Remarks length=20 format=$20.
from have 
;
quit;
逻辑:

data want;
set have_dates end=eof;
retain Issue_prv;
retain maturity_prv;
retain number_prv;
if _n_ = 1 then do; 
    Issue_prv=Issue_Date;
    maturity_prv=Maturity_Date;
    number_prv=number;
    output;
end;
if _n_ > 1 then do;
    if (issue_date = Issue_prv and Maturity_Date=maturity_prv) 
        then do; Remarks="Distinct Transaction"; Maturity_date_1=Maturity_Date; end;
    if (intck('Day',Issue_Date,maturity_prv) = 0 or intck('Day',Issue_Date,maturity_prv)= 1)
    then do; Remarks=catx(" ","Roll over from ",number_prv); number_prv=number;end;
    if (eof and Remarks ne "") then do ; final=Maturity_Date; call symput("final_maturity",Maturity_Date); end ;
    output; 
    Issue_prv=Issue_Date;
    maturity_prv=Maturity_Date;
    end;
    format Issue_prv maturity_prv final date9.;
    keep number amount Issue_Date Maturity_Date Maturity_date_1  Remarks;
run;
proc sql;
update want
    set Maturity_date_1= &final_maturity. , Remarks="Roll over"
    where Remarks="";
quit;
输出:


为什么4是2的延续而不是3的延续?4可以是2或3的延续。为什么我链接2到4,因为我想知道,如果两个事务之间存在间隙,是否有可能链接下一个事务。