SAS数据步内循环
SAS
数据处理
我们都知道,SAS的功能很强大,其中数据步是base模块中很重要的一部分,数据步读取数据、修改数据,有很大的灵活性,很大程度上允许你控制怎么改变你的数据。但是有一点,大家可能并不在意,特别是对于刚刚接触SAS的人来说;那就是数据步有一个潜在的内在循环,你不需要写程序告诉sas去执行该循环,sas在处理数据的时候会自动执行。
那么什么是SAS数据步的内在循环呢,简单的来说就是,数据步程序会逐行逐条记录的执行(DATA steps execute line by line and observation by observation.)。 SAS数据步逐行并且逐条记录的执行,其中,逐行执行是显而易见的,那就是,SAS会在数据步的第二条语句之前执行第一条语句,再第三条语句之前执行第二条,按照数据步程序语句的先后顺序逐行执行。但是很多新手常常会犯这样的错误,就是,在创建一个变量之前就开始使用它。如果变量z是由变量x和变量y生成的,那么在写程序的时候一定要保证生成x和y的程序在生成y的程序之前。 那我们怎么理解逐条记录执行呢,SAS从输入数据集读取一条记录,然后依次执行数据步所有程序(逐行执行),在数据步程序执行完之后,在回到数据步开始,紧接着再读取第二条记录,然后依次类推。意思就是sas在数据步执行的时候只会同时处理一条记录。 下面的图例说明了sas数据步怎么完整处理数据集一条记录。
如图所示,SAS从输入数据集读取记录1,然后用数据步程序的Line 1 程序处理它,接着是Line 2,直到所有的数据步程序处理结束,最后SAS会输出这条记录到输出数据集里。图中只是展示了第一条记录执行过程,一旦SAS处理完了第一条记录,循环会跳到数据步的开始,然后读取第二条记录,接着处理,直到sas处理完所有的记录,循环自动停止。
回到顶部