Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.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_Datastep - Fatal编程技术网

Sas 基于上一行的按插值分组

Sas 基于上一行的按插值分组,sas,datastep,Sas,Datastep,目标是在按id分组的两行之间的date变量之间存在间隙时添加新行。 如果出现间隙,则复制第一行。但是,不应仅将日期功能作为第一行,而应将其递增一天 此外,所有内容都需要按id分组。我需要在不扩展函数的情况下实现它 data sample; input id date numeric_feature character_feature $; informat date yymmdd10.; datalines; 1 2020-01-01 5 A 1 2020-01-02

目标是在按id分组的两行之间的date变量之间存在间隙时添加新行。 如果出现间隙,则复制第一行。但是,不应仅将日期功能作为第一行,而应将其递增一天

此外,所有内容都需要按id分组。我需要在不扩展函数的情况下实现它

data sample;
    input id date numeric_feature character_feature $;
    informat date yymmdd10.;
    datalines;

1 2020-01-01 5 A
1 2020-01-02 3 Z
1 2020-01-04 2 D
1 2020-01-05 7 B
2 2020-01-01 4 V
2 2020-01-03 1 B
2 2020-01-05 9 F
;

data sample;
    set sample;
    format date yymmdd10.;
run;
预期结果:

data sample;
    input id date numeric_feature character_feature $;
    informat date yymmdd10.;
    datalines;

1 2020-01-01 5 A
1 2020-01-02 3 Z
1 2020-01-03 3 Z
1 2020-01-04 2 D
1 2020-01-05 7 B
2 2020-01-01 4 V
2 2020-01-02 4 V
2 2020-01-03 1 B
2 2020-01-04 1 B
2 2020-01-05 9 F
;

data sample;
    set sample;
    format date yymmdd10.;
run;

您可以执行1:1自合并,第二个自合并从第2行开始,以提供潜在客户价值。1:1合并不使用
BY
语句

例如:

data have;
    input id date numeric_feature character_feature $;
    informat date yymmdd10.;
      format date yymmdd10.;
    datalines;
1 2020-01-01 5 A
1 2020-01-02 3 Z
1 2020-01-04 2 D
1 2020-01-05 7 B
2 2020-01-01 4 V
2 2020-01-03 1 B
2 2020-01-05 9 F
;

data want;
  * 1:1 merge without by statement;
  merge 
    have              /* start at row 1 */    
    have ( firstobs=2 /* start at row 2 for lead values */
           keep=id date            /* more data set options that prepare the lead */
           rename = ( id=nextid
                      date=nextdate
         )) 
  ;

  output;

  flag = '*';                  /* marker for filled in dates */
  if id = nextid then
    do date=date+1 to nextdate-1;
      output;
    end;

  drop next:;
run;
结果标记填写日期


您可以执行1:1自合并,第二个自合并从第2行开始,以提供潜在客户价值。1:1合并不使用
BY
语句

例如:

data have;
    input id date numeric_feature character_feature $;
    informat date yymmdd10.;
      format date yymmdd10.;
    datalines;
1 2020-01-01 5 A
1 2020-01-02 3 Z
1 2020-01-04 2 D
1 2020-01-05 7 B
2 2020-01-01 4 V
2 2020-01-03 1 B
2 2020-01-05 9 F
;

data want;
  * 1:1 merge without by statement;
  merge 
    have              /* start at row 1 */    
    have ( firstobs=2 /* start at row 2 for lead values */
           keep=id date            /* more data set options that prepare the lead */
           rename = ( id=nextid
                      date=nextdate
         )) 
  ;

  output;

  flag = '*';                  /* marker for filled in dates */
  if id = nextid then
    do date=date+1 to nextdate-1;
      output;
    end;

  drop next:;
run;
结果标记填写日期

要“向前看”,您可以从第二次观察开始重新读取相同的数据集。当读取超过输入的末尾时,SAS将停止,因此添加额外的空观察值

data sample;
  input id date numeric_feature character_feature $;
  informat date yymmdd.;
  format date yymmdd10.;
datalines;
1 2020-01-01 5 A
1 2020-01-02 3 Z
1 2020-01-04 2 D
1 2020-01-05 7 B
2 2020-01-01 4 V
2 2020-01-03 1 B
2 2020-01-05 9 F
;

data want;
  set sample;
  by id;
  set sample(firstobs=2 keep=date rename=(date=next_date)) sample(obs=1 drop=_all_);
  output;
  if not last.id then do date=date+1 to next_date-1; output; end;
run;
结果:

                           numeric_    character_
Obs    id       date        feature     feature       next_date

  1     1    2020-01-01        5           A         2020-01-02
  2     1    2020-01-02        3           Z         2020-01-04
  3     1    2020-01-03        3           Z         2020-01-04
  4     1    2020-01-04        2           D         2020-01-05
  5     1    2020-01-05        7           B         2020-01-01
  6     2    2020-01-01        4           V         2020-01-03
  7     2    2020-01-02        4           V         2020-01-03
  8     2    2020-01-03        1           B         2020-01-05
  9     2    2020-01-04        1           B         2020-01-05
 10     2    2020-01-05        9           F                  .
要“向前看”,您可以从第二次观察开始重新读取相同的数据集。当读取超过输入的末尾时,SAS将停止,因此添加额外的空观察值

data sample;
  input id date numeric_feature character_feature $;
  informat date yymmdd.;
  format date yymmdd10.;
datalines;
1 2020-01-01 5 A
1 2020-01-02 3 Z
1 2020-01-04 2 D
1 2020-01-05 7 B
2 2020-01-01 4 V
2 2020-01-03 1 B
2 2020-01-05 9 F
;

data want;
  set sample;
  by id;
  set sample(firstobs=2 keep=date rename=(date=next_date)) sample(obs=1 drop=_all_);
  output;
  if not last.id then do date=date+1 to next_date-1; output; end;
run;
结果:

                           numeric_    character_
Obs    id       date        feature     feature       next_date

  1     1    2020-01-01        5           A         2020-01-02
  2     1    2020-01-02        3           Z         2020-01-04
  3     1    2020-01-03        3           Z         2020-01-04
  4     1    2020-01-04        2           D         2020-01-05
  5     1    2020-01-05        7           B         2020-01-01
  6     2    2020-01-01        4           V         2020-01-03
  7     2    2020-01-02        4           V         2020-01-03
  8     2    2020-01-03        1           B         2020-01-05
  9     2    2020-01-04        1           B         2020-01-05
 10     2    2020-01-05        9           F                  .