Sas 在变量中选择满足计数条件的组

Sas 在变量中选择满足计数条件的组,sas,Sas,我有一个关于组的变量,我们会说它们是颜色。我只需要选择5-10次观察的颜色。然后,我将对每一组进行测试。我该怎么做呢 我使用的是SAS大学版。您也可以使用proc sql执行此操作。下面的方法将允许您保留所有观察结果,但允许您根据需要在程序中灵活应用过滤器 have _________________ grouping y1 x1 x2 1 5 10 20 1 6 20 40 2 7 30 60 2 4 40 0 2

我有一个关于组的变量,我们会说它们是颜色。我只需要选择5-10次观察的颜色。然后,我将对每一组进行测试。我该怎么做呢


我使用的是SAS大学版。

您也可以使用proc sql执行此操作。下面的方法将允许您保留所有观察结果,但允许您根据需要在程序中灵活应用过滤器

have
_________________
grouping y1 x1 x2 
1        5  10 20
1        6  20 40
2        7  30 60
2        4  40 0
2        6  50 1
_________________

proc sql noprint;
    create table want as
         select t1.grouping, y1, x1, x2, nobs
         from have as t1
         LEFT JOIN
              (select grouping, count(y1) as nobs
               from have
               group by grouping) as t2
         ON t1.grouping= t2.grouping
         order by t1.grouping
    ;
quit;
这将为您提供如下数据集:

want
______________________
grouping y1 x1 x2 nobs
1        5  10 20 2
1        6  20 40 2
2        7  30 60 3
2        4  40 0  3
2        6  50 1  3
现在,您可以使用新变量nobs在此数据集上应用过滤器,使用您希望使用的任何程序。例如:

proc glm data=want;
    where nobs between 5 and 10;
    class grouping;
    model y1 = x1 x2;
run;

如果您的意思是有一个定义组的变量,例如一个名为COLOR的变量,其值为“RED”和“GREEN”。然后,如果要仅为至少有5个观察值的组选择观察值,则必须计算每个组的观察值数量

因为您没有发布任何样本数据,所以让我们使用SASHELP.CLASS,它具有可变的性别,可用于将9名女生和10名男生分组。因此,让我们编写一个查询,只返回至少有10个观察结果的组,即男生

使用GROUPBY和HAVING子句使用PROC SQL很容易做到这一点

proc sql;
  create table want as 
  select * from sashelp.class
  group by sex
  having count(*) > 9 
  ;
quit;

请注意,这在SAS中运行良好,但在其他SQL实现中可能不起作用。

谢谢,@Tom。我完全没有考虑使用我刚刚创建的新表。已经有一段时间了。只是想继续我的工作:

     PROC SORT data=SPEAR.MAN;
      by var1;
     RUN;

     PROC SQL;
       CREATE table COUNT as select * from SPEAR.MAN
       GROUP by var1 having count (*) ge 5;
     QUIT;

     PROC CORR data=WORK.COUNT spearman nosimple;
       var var2 var3;
       by var1;
      RUN;

这不适用于堆栈溢出问题。请尝试解决此问题并就此提出问题。您是在问如何专门使用SAS程序来解决此问题吗?对不起。我不明白这为什么不合适。我正在使用SAS大学。我可以按分组执行测试,但我只需要选择具有5-10个观察值的组。我昨天搜索了一整天来解决这个问题,但除了为每个组创建一个新的数据集之外,我找不到任何帮助。这个问题不合适,因为据我所知,你不是在问编程问题。如果你是,那么你没有问一个足够具体的问题——这个网站不是让别人为你写一个大型程序,而是回答一些狭隘的、具体的编程问题。有关更多信息,请参阅和。如果您需要有关SAS大学版的点击式元素的帮助,则需要在适当的网站上询问该问题,例如。这只是编程方面的问题。非常感谢。这非常有用。我还没有用过。我将进一步探讨这一点。我唯一想到的是当时是不是在哪里,但那是行不通的。然后,我需要对每一组进行Spearman等级测试,但每次只做一件事:再次感谢您对患者的帮助。您应该能够使用PROC CORR完成这项工作。使用BY语句为每个组运行单独的分析。这应该是可行的。请注意,现在SAS将创建按变量分组排序的输出数据,但根据文档,将来可能会更改。如果要依赖于顺序,最好包含一个显式的ORDERBY子句,如在BY语句的最后一步中所做的。