【问题标题】:SAS counting observationsSAS 计数观察
【发布时间】:2021-03-07 19:14:22
【问题描述】:

我正在查看一个看起来像的数据集

GVKEY 日期年份

1 001000 1971

2 001000 1972

3 001000 1973

4 001000 1974

5 001000 1975

6 001000 1976

7 001001 1971

.

.

.

88 001010 1971

89 001010 1972

90 001010 1973

.

.

.

105 001010 1988

106 001010 1989

107 001011 1973

.

.

.

所以我只想保留从 1971 年到 1989 年在 DateYear 中没有间隙的 GVKEY。我想我将不得不删除重复项,但是我将如何计算每个 GVKEY 的观察值并删除不存在的 GVKEY有 19 个观察结果? 这在SAS中可能吗? 谢谢。

【问题讨论】:

  • 数据是否按GVKEY YEAR排序?在时间段开始或结束时缺失的观察是否算作间隙?如果没有差距,但只有 1975 到 1985 年呢?

标签: count sas frequency


【解决方案1】:

Proc SQL 中,您可以计算组内不同的值,以识别具有 19 个不同年份的键。

例子:

proc sql;
  create table want as
  select distinct key, year
  from have
  where year between 1971 and 1989
  group by key
  having count(distinct year) = 19
  order by key, year
  ;

【讨论】:

    【解决方案2】:

    在数据步骤中执行此操作的直接方法是双 DoW 循环。循环遍历数据两次;对于任何给定的 ID,首先它会检查该 ID 的所有记录,检查它是否符合标准(在这种情况下,删除,尽管您可以做相反的事情),然后循环第二次并应用适当的输出或删除的逻辑。

    data want;
      do _n_ = 1 by 1 until (last.id);
        set have;
        by id;
        if [logic] then delete_flag=1;
      end;
      do _n_ = 1 by 1 until (last.id);
        set have;
        by id;
        if delete_flag ne 1 then output;
      end;
    run;
    

    您只需要确定设置删除标志的逻辑是什么。在您的情况下,可能是使用if first.id and year ne 1971if last.id and year ne 1989if dif(year) gt 1 的某种组合,但是您的问题还不够清楚,无法清楚地说明您在这里要做什么 - 但希望您能弄清楚,或更新更多细节。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2014-05-14
      • 1970-01-01
      • 2016-04-18
      • 1970-01-01
      相关资源
      最近更新 更多