如何在SAS中正确使用STOPOVER?现有代码未触发预期报错求助
解决方案
原代码的问题在于第二个data MyData;步完全覆盖了PROC IMPORT生成的数据集,且没有实际读取CSV数据——你只是定义了变量长度和STOPOVER,但没有指定读取源数据的逻辑,自然不会触发长度检查。
以下两种方法可以实现你的需求:
方法1:直接读取CSV时触发长度报错
跳过PROC IMPORT,直接用DATA步读取CSV,结合infile的stopover选项和变量长度限制,当输入值超过定义长度时立即终止并报错:
data MyData; length COUNTRY $5; infile "/home/u62799951/sasuser.v94/My_Folder/Data.csv" dsd firstobs=2 stopover; input COUNTRY $; run;
dsd:处理CSV的分隔符和带引号的字段firstobs=2:跳过CSV的表头行(如果你的CSV第一行是字段名)stopover:当输入数据不符合变量定义(比如长度超过5)时,立即停止并抛出错误
方法2:导入后检查并报错
如果需要保留PROC IMPORT的导入逻辑,在导入后新增检查步骤,发现超长值时主动触发报错:
proc import file = "/home/u62799951/sasuser.v94/My_Folder/Data.csv" out = MyData_raw dbms = csv replace; run; data MyData; set MyData_raw; if length(COUNTRY) > 5 then do; put "ERROR: 国家名称" COUNTRY "长度超过5个字符,行号:" _n_; abort abend; /* 终止SAS会话并返回错误码 */ /* 若仅终止当前数据步,用 abort cancel; */ end; run;
- 先将PROC IMPORT的结果存到临时数据集
MyData_raw,避免覆盖 - 用
length(COUNTRY)判断字符长度,超长时输出错误信息并终止
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

