温馨提示:本文翻译自stackoverflow.com,查看原文请点击:其他 - SAS how to use first. with NOTSORTED
sas

其他 - SAS首先使用。

发布于 2020-04-16 11:18:44

我有这个问题

我的代码是

data step10;
  set step9;
  by referenceid NOTSORTED;
  if first.referenceid then JOIN_KEY=1;
  ELSE JOIN_KEY+1;
run;

然后输出显示

在此处输入图片说明

最后两行应为2,因为“ MBA1”和“ MBA2”之前已经存在。

由于这两行是唯一的,因此这两行除外。

我应该如何更改我的代码?

查看更多

提问者
supercool djkazu
被浏览
27
Richard 2020-02-05 01:14

按组是具有相同的按变量值的相邻行的序列。

NOTSORTED用于处理由连续但未排序的值构成的组

您的所有样本数据的分组大小均为1,因为没有任何id值在列中向下重复。

您可以尝试以下两种技术:

  • referenceid对数据进行排序<some-other-sequencing-variable>并按组处理正常。
  • 在处理数据集时保持哈希值referenceid命中数

哈希示例(我的sequenceId===您的join_key):

data want;
  set have;
  if _n_ = 1 then do;
    declare hash ids();
    ids.defineKey('referenceid');
    ids.defineData('referenceid', 'sequenceId');
    ids.defineDone();
  end;

  if ids.find() ne 0 
    then sequenceId = 1;
    else sequenceId + 1;

  ids.replace();
run;