围炉吃瓜 发表于 2012-11-20 23:07 
谢谢~~那如果这是错误的,为啥程序还执行了,并且新的数据集中有数据呢?
SAS执行IF语句时,会判断其中'and', 'or' 所连接的条件应该是真(非0)与假(0或缺失),当遇到字符的时候,会发生自动的变量类型转换。
例子中if njdm="退学" or "休学" then delete;中or后面虽然不是缺失,但是or后面这个条件永远是假的,因为如log所说,“休学”是一个无效的数值数据,因此转化成数值之后是一个缺失值。
因此 if语句就相当于if njdm="退学" or . then delete;
数据自动转换过程中遇到无效数据时,SAS仍然会执行。