如何从sashelp.class数据集获取男女性别首次出现的完整记录?
解决SAS中获取不同性别首次出现记录的问题
错误原因
你用的LIMIT是MySQL等其他SQL方言的语法,SAS的PROC SQL不支持LIMIT关键字,这就是报错的核心原因。如果只是想全局取前N行,SAS PROC SQL可以用OUTOBS=N选项(比如Proc sql outobs=2;),但这个方法没法实现按性别分组各取第一条的需求。
正确解法
方法1:PROC SQL分组子查询
利用SAS数据集隐含的_N_变量(标记观测的原始顺序),分组找到每个性别的首个观测号,再关联原表取出完整记录:
Proc sql; Select c.* From sashelp.class c Where _N_ in ( Select min(_N_) From sashelp.class Where sex in ('m','f') Group by sex ); Quit;
方法2:DATA步(更简洁高效)
用BY语句分组,配合SAS自动生成的first.sex变量,直接筛选每个性别的第一条记录:
Data first_sex; Set sashelp.class; By sex; If first.sex; /* 只保留每个Sex分组的第一个观测 */ Where sex in ('m','f'); Run;
注:即使sashelp.class没有按sex排序,BY语句会自动按sex分组且保留原始观测顺序,依然能取到每个性别在原数据中首次出现的记录。
内容的提问来源于stack exchange,提问作者Fanatic
相关产品推荐
相关产品推荐

