sas系统和数据分析使用fsview过程编辑数据集(编辑修改稿)内容摘要:
如图 所示。 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系统和数据分析 电子 商务系列 上海财经大学经济信息管理系 IS/SHUFE Created by Page 10 of 20 此程序循环结构是外循环 DATA 步执行二次,因此产生二条观测,在每次外循环中,内循环 DO重复执行四次,新增四个变量。 使用 DO 语句的循环变量 i作为数组的下标,这种下标的使用方法是 DO 循环中处理下标数组最常用的方法。 3. 在循环 DO 组中使用 OUTPUT 语句产生数据集 如果在 DO- END 内循环结束语句 END 前插入一条 OUTPUT 语句,那么每次内循环将输出一条观测,而不是内循环所产生的所有变量值只输出在一条观测中。 对于每条观测的变量取值,要注意在 DATA步的同一个外循环中,已经产生的变量值保持不变,内循环 OUTPUT语句前未赋值的变量为缺失值,直到 DATA步的下一个外循环开始时,所有用 INPUT 或赋值语句创建的变量在重复 DATA步开始时将被设置为缺失值。 我们以上面的程序 END 语句前插入一条 OUTPUT 语句为例,程序运行结果如图 所示。 图 循环 DO 组中使用数组来产生数据集 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系统和数据分析 电子 商务系列 上海财经大学经济信息管理系 IS/SHUFE Created by Page 11 of 20 4. 用循环 DO 组和 RETAIN 语句产生数据集 由已有数据集产生具有新增变量的新数据集时,通常新增变量值是本条观测原变量值和循环变量值的函数值。 但如果新增变量值是历史观测中原变量值和循环变量值的函数值时,首先考虑是将历史观测中原变量值取到中间变量,例如数组变量中。 但是因为在每次重复开始 DATA步时,所有用 INPUT 或赋值语句创建的变量将被设置为缺失值,那该如何处理解决呢。 在 SAS 系统中有一条 RETAIN 语句专门用于解决这一问题。 在数据步 DATA 中使用了 RETAIN 语句来为变量设置初值后 , RETAIN 语句使得用INPUT语句或赋值语句所指定的变量值从 DATA步的这次执行到下一次重复时被保留。 而如果没有使用 RETAIN 语句, DATA步每次重复执行之前这些变量就会被设置为缺失值。 我们这里给出了 RETAIN 语句几种常用的使用格式: Retain。 Retain T1 T2 T3。 Retain T1 T2 T3 100。 Retain T1 T2 T3 (100 )。 Retain T1 T2 T3 (100 99 98 )。 第一种使用格式表示用 INPUT语句或赋值语句创建的所有变量从 DATA步的这次执行到下一次重复时被保留。 第二种使用格式规定了变量名字,变量列表或数组名,它们的值是用户想保留的。 第三种使用格式表示一个变量列表 T T T3 接受同一个初始值 100。 第四种使用格式是将初始值 100 用小括号括起来, SAS 系统将分配括号中的这个值给变量列表中的第一个变量,即 T1=100, T2 和 T3 为缺失值。 第五种使用格式给出了初始值列表,将依次分配初始值列表中的值给变量列表中各个变量,即 T1=100, T2=99, T3=98。 图 循环 DO 组中使用了 OUTPUT 语句 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系统和数据分析 电子 商务系列 上海财经大学经济信息管理系 IS/SHUFE Created by Page 12 of 20 例如,我们有一组日期 DATE 和收盘价 CLOSE 股票数据,要生成一个带有 3 日移动平均价 MOVEAVER 的数据集。 所谓 3 日移动平均价,指最近 3 日收盘价的平均值,即当天、昨天和前天收盘价的平均值。 昨天和前天收盘价数据要在产生时用 RETAIN 语句事先保留下来,在计算当日移动平均价时才不至于取到缺失值,而不能计算。 为了便于理解,我们将程序编写如下: Data MAV。 Retain day 3 i 1。 Input date date7. close。 Array a{4}。 a{ i }= close。 Retain。 If _n_= day Then do。 t=0。 Do i = 1 to day。 t= t+a{i}。 a{i}= a{i +1}。 End。 moveaver=t/day。 i=day1。 End。 i=i+1。 Card。 19MAY99 20MAY99 21MAY99 24MAY99 25MAY99 Proc print data= MAV。 Run。 程序中使用了自动变量 _n_,它自动存放当前观测的逻辑顺序号。 移动平均价的计算要考虑初始情况,对于 3 日移动平均价来讲,第一条和第二条观测的 3 日移动平均价的数值是不存在的,从第三条观测开始有计算数据。 程序中的 IF语句就是为了判断从第三条观测开始计算 3 日移动平均价而设置的。 第一条 RETAIN语句的目的是设置常量 day=3,下标变量 i的初值为 1,第二条 RETAIN 语句的主要目的是为了保留存放收盘价数据的数组 a{i},我们为了使大家明白各个变量的变化过程, RETAIN 语句后未专门指定数组 a{i},而是保留用 INPUT语句或赋值语句创建的所有变量。 如果指定数组 a{i},产生的数据集只有 DATE、 CLOSE 和MOVEAVER 三个变量。 DO- END 循环的作用是用 T 累加器求最近三日收盘价之和, T 变量每次求和前要初始化为 0。 为了始终保持数组 a{1} 、 a{2}、 a{3}中存放的是最近三日的收盘价数据,用 a{i}= a{i +1}语句将刚计算过的数据前移, a{2}中数据存放 a{1}, a{3}中数据存81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系统和数据分析 电子 商务系列 上海财经大学经济信息管理系 IS/SHUFE Created by Page 13 of 20 放 a{2}, a{1}中原数据正常丢弃,留空 a{3}准备读下一条记录的收盘价。 程序运行结果如图 所示。 对于只有少量观测的数据集,我们还可以编写如下程序: Data MAV(Keep= date close moveaver)。 Retain day 3。 Input date date7. close。 Array a{5}。 a{ _n _}= close。 Retain。 If _n_= day Then do。 t=0。 Do i =_n _ - day + 1 to _n _。 t= t+a{i}。 End。 moveaver=t/day。 End。 Card。 19MAY99 20MAY99 21MAY99 24MAY99 25MAY99 Proc print data= MAV。 Run。 这个程序的特点是将历史记录的收盘价全部存放到数组 a{i}中,因此 程序编写简单和短 图 用循环 DO 组、数组和 RETAIN 语句所产生的 MAV 数据集 81edb6ff5799cbd72b415b6e1b9a8a6b SAS 系统和数据分析。sas系统和数据分析使用fsview过程编辑数据集(编辑修改稿)
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。
用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。