我有一个带组的变量,我们会说它们是颜色。我只需要选择5-10个观察颜色。然后,我将对每个组进行测试。我怎么能这样做呢?
我正在使用SAS大学版。
答案 0 :(得分:0)
谢谢@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;
答案 1 :(得分:-1)
您也可以使用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
来应用过滤器。例如:
proc glm data=want;
where nobs between 5 and 10;
class grouping;
model y1 = x1 x2;
run;
答案 2 :(得分:-1)
如果你的意思是你有一个DEFINES组的变量,比如名为COLOR的变量,其值为' RED'和' GREEN'。然后,如果您只想选择具有至少5个观察值的组的观察值,则必须计算每个组的观察数量。
由于您没有发布任何样本数据,因此我们使用SASHELP.CLASS,它具有可变SEX,可用于分组为9名女性和10名男性学生。因此,让我们写一个查询,只返回至少有10个观察组(男学生)。
使用GROUP BY和HAVING子句,使用PROC SQL非常容易。
proc sql;
create table want as
select * from sashelp.class
group by sex
having count(*) > 9
;
quit;
请注意,这在SAS中运行良好,但在其他SQL实现中可能无效。