赞
踩
##以下代码为stata程序 *------------------------ *-2.1 创建变量的更多技巧 *------------------------ * ==本节目录== * 2.1.1 _n 和 _N * 2.1.1.1 _n 与 _N * 2.1.1.2 _n 与 _N 的应用 * 2.1.2 -egen- 命令 * 2.1.2.1 egen 与 gen 的区别 * 2.1.2.2 产生等差数列: seq() 函数 * 2.1.2.3 填充数据:fill() 函数 * 2.1.2.4 产生组内均值和中位数 * 2.1.2.5 跨变量的比较和统计 * 2.1.2.6 变量的标准化 * 2.1.2.7 变量的平滑化(Moving Average) * 2.1.2.8 更多的 egen() 函数 * =本节命令= * ===================================================== * _n, _N, tsset, egen, display, list, tabulate * xi, fvset fvvarlist, recode, recode(), irecode() * cond(), inlist(), inrenge(), egenmore, * ===================================================== *___________________ *-2.1.1 _n 和 _N *-2.1.1.1 _n 和 _N 的含义 *-定义: * _n "样本序号变量",是一个变量,内容为 1,2,3,...,n * _N "样本数指标", 是一个单值,内容为 样本数 *-说明: * _n 是一个永远存在,但却不能 list 出来的特殊变量 * _n 的取值会随样本排序的变化而变化 sysuse nlsw88.dta, clear list age wage in 1/10 // 最左边的1,2,...就是 _n 中的内容 list _n // 错误 sort hours gen nid_1 = _n // 第一个 _n 的内容 list nid_1 hours race in 1/10 sort wage gen nid_2 = _n // 第二个 _n 的内容 list nid_1 nid_2 hours race in 1/10 dis _N // _N 是一个单值 scalar obs = _N quietly sum wage //help quietly dis r(mean)*_N dis r(mean)*obs *-2.1.1.2 _n 和 _N 的应用 sysuse sp500.dta, clear sort open sum open dis r(max) gen o_max = open[_N] // 最大值 gen o_diff = open[_n] - open[_N] // 与最大值的差 gen b_diff = open[_N] - open[1] // range list open o_max o_diff b_diff in 1/20 *-差分 sort date gen d_open = open[_n] - open[_n-1] *-对数差分 gen dln_open = ln(open[_n]) - ln(open[_n-1]) *-移动平均 gen mv3_open = (open[_n-1] + open[_n] + open[_n+1]) / 3 list open o_max o_diff dln_open mv3_open in 1/10 *-滞后项、前推项、差分 tsset date /*声明数据为时间序列*/ gen open_lag = L.open gen open_lag2 = L2.open gen open_forward = F.open gen open_diff = D.open gen open_diff2 = D2.open list open* in 1/10 // 只要有关于open的变量全部出来 reg close L(1/3).(close open) // 回归 ***这行代码很重要 *-增长率 qui tsset date /*声明数据为时间序列*/ //qui help quietly gen r1 = D.close/L.close gen lnclose = ln(close) gen r2 = D.lnclose // 第二种计算方法 list date r1 r2 in 1/10 *-分组进行 sysuse nlsw88.dta, clear bysort industry: gen gid = _n //bysort分类 list gid industry in 1/50, sepby(industry) //sepby分布显示 美观 *______________________ *-2.1.2 -egen- 命令 * extended generate 的缩写 help egen //区别 gen 和 egen 两函数 *-2.1.2.1 egen 与 gen 的区别 *-基本差异 sysuse sp500, clear gen sum_close0 = sum(close) // 累加 egen sum_close1 = sum(close) // 总体加总 list close sum_close0 sum_close1 in 1/10 *-对于缺漏值的处理也有差异 clear input v1 v2 1 5 2 . . 3 2 4 4 . . 6 end gen mean = (v1+v2)/2 egen mean_egen = rmean(v1 v2) list *-2.1.2.2 产生等差数列: seq() 函数 clear set obs 100 egen x1 = seq(), from(-1) //生成一个等差数列 从-1开始 默认等差是1 list x1 in 1/10 egen year1 = seq(), from(2000) to(1900) list year1 in 1/20 egen code = seq(), from(1) block(5) //block(5)以五个一块显示出来 list code in 1/20 list code year in 1/20 *-2.1.2.3 填充数据:fill() 函数 egen r2 = fill(2 4) // 间隔 2 的递增数列 egen r3 = fill(6 3) // 间隔 -3 的递减数列 egen r4 = fill(1990 1991 1992 1990 1991 1992) // 分块重复数列** list r2-r4 in 1/20 *-2.1.2.4 跨变量的比较和统计 sysuse sp500.dta, clear egen avg_price = rmean(open close) list open avg_price close in 1/10 replace open = int(open) replace close= int(close) egen diff = diff(open close) sort diff list open diff close in 1/10 *-2.1.2.5 变量的标准化 *-定义:x_s = (x - x_m) / x_sd *-x_s 的均值将为 0; 标准差将为 1 *-线性转换,并不改变变量间的相对大小 sysuse sp500.dta, clear egen s_change1 = std(change) egen s_change2 = std(change), mean(20) std(3) sum change s_change* do A2_egen_std.do ///该文件下代码指令 twoway (histogram change, color(blue)) /// (histogram s_change1,color(red )) /// (histogram s_change2,color(green)), /// legend(label(1 "原始数据(-0.54,15.8)") lab(2 "标准化数据(0,1)") lab(3 "(20,3)")) *-2.1.2.6 更多的 egen() 函数 help egenmore // 外部命令
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。