SAS在个别观察中创建缺少的数字ID。

时间:2016-07-27 14:07:33

标签: sas

我需要根据已经分配了ID的数据集概述当前可用的一系列ID号(如果ID在文件上,那么它正在使用中...如果它没有存档,那么它可供使用)。

问题是我不知道如何创建一个显示当前存档的两个ID#之间的ID号的数据集 - 假设我有下面的数据集 -

data have;
input id;
datalines;
1
5
6
10
;
run; 

我需要的是新数据集在此数据集的以下结构中 -

data need;
input id;
datalines;
2
3
4
7
8
9
;
run; 

我不确定如何制作ID#2,3和4的观察结果,因为这些是“可用ID”的情景......

我最初的尝试是将ID值从一个观察值减去下一个观察值以找到差异,但我从那里开始就如何使用该值并在它之前将观察结果加1 ...从那里开始变得相当混乱。

任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:1)

只要您知道可能的ID集合,就可以将它们全部放在一个文件中并排除使用过的ID。 e.g。

data id_set;
do id = 1 to 10;
    output;
end;
run;

proc sql;
create table need as
    select id
        from id_set
            where id not in (select id from have)
    ;
quit;

答案 1 :(得分:1)

创建一个存储先前id的临时变量,然后在它和当前id之间循环,输出每次迭代。

...
componentWillMount() {
    const { store } = this.context;
    store.dispatch({type: 'BLAH'});
    // I want the request data
  }

  render() { ... }

答案 2 :(得分:0)

以Jetzler的答案为基础:另一种选择是使用MERGE语句。在这种情况下:

  

注意:在合并之前,按id排序两个数据集(如果尚未排序);

data want;
    merge id_set (in=a)
          have (in=b); /*specify datasets and vars to allow the conditional below*/
    by id; /*merge key variable*/
    if a and not b; /*on output keep only records in ID_SET that are not in HAVE*/
run;