SAS数据步中BY语句无法运行问题求助
问题原因及解决办法
你的报错主要有两种可能:
语法错误:你实际运行的代码大概率写错了BY语句格式,比如误把排序选项
ascending当成了独立的BY变量(比如写成by SEX, ascending;这类错误写法),导致SAS将ascending视为要分组的变量名,但你的draft_us数据集里根本没有这个变量,所以触发“BY variable ascending is not on input data set”的报错。数据集未按BY变量排序:就算代码是正确的
by SEX;,SAS使用BY语句时,要求输入数据集必须先按指定的BY变量(这里是SEX)完成排序。你的draft_us里SEX的顺序是Male、Female、Male、Male、Female、Male、Male、Female,完全没有按SEX连续分组排序,SAS无法识别有效的BY组,也会导致BY语句无法正常工作。
对应的解决方法
- 修正BY语句语法:如果需要指定升序排序(SAS默认就是升序,可省略该选项),正确写法是将
ascending放在BY变量后,比如:
data set_draft; set draft_us; by SEX ascending; run;
- 先排序再使用BY语句:先通过PROC SORT对数据集按SEX排序,再执行数据步:
proc sort data=draft_us; by SEX; run; data set_draft; set draft_us; by SEX; run;
- 不排序直接处理分组:如果不需要改变原数据的顺序,只想按现有连续的SEX分组进行处理,给BY语句添加
NOTSORTED选项,告诉SAS数据是分组但未排序的:
data set_draft; set draft_us; by SEX NOTSORTED; run;
内容的提问来源于stack exchange,提问作者MNU
相关产品推荐
相关产品推荐

