如果提取出来的变量是字符型数据,用real函数将其变成数值型,那么生成的就不是空值,那么这个判断就是假的,因此输出的r=0
如果提取出来的变量是字符型中文,用real函数将其变成数值型,因为是中文,所以生成值就是空值,那么这个判断就是真的,因此输出r=1
输入命令:
replace v3=fund_id if r==1
当r=1时,也就是当第一列出现的是人名时,将v3覆盖,即可以把第一列的人名移到第三列去,而保持v3本身存在的数据不变。
输入命令:
replace fund_id=fund_id[_n-1] if r==1
在r=1时,也就是第一列里面是人名的时候,把此时人名对应的fund_id替换成前一个数值对应fund_id,也就是fund_id=fund_id[_n-1],这样第二行就和第一行相同了。第一个fund_id后面不能加[_n],这是错误的,以后所有类似的都不能这么写。
因为是用_n-1表示的,所以此命令是一个循环,一条一条循环执行,直到最后一个。
6.strpos(var,)定位函数,定位后面一字符串在前面一字符串中出现的位置。 strpos(var,)前面是变量名,后面输入分隔或者定位的符号或者数据
因为现在没办法对所有数据从前面统一提取,因为王亚伟有六个字符,而田驚只有四个字符,所以只能用定位函数,因为上面显示的就任时间和卸任时间是以“(”“-”“)”分隔的,所以先将这三个符号分别定位。 输入命令:
gen x=strpos(CEO,\gen y=strpos(CEO,\gen z=strpos(CEO,\
即生成三个变量,每个变量后面对应的是三个分隔的符号对应的在母串中位置的编号。
输入命令:
gen CEO_name=substr(CEO,1,x-1) gen stdt=substr(CEO,x+1,8) gen eddt=substr(CEO,y+1,8)
生成三个变量,每个变量提取的是不同的数据,用函数表示。
也就是基金经理的名字所提取的字符就是从第一个开始,总共是x-1个字符,因为x代表左括号对应的编号,所以用x-1就表示人名的最后一个字符;
Stdt是就任时间,是从第x+1编号开始的,日期总共是八位,所以直接输入8就可以了。 同样的eddt是卸任时间,是从第y+1开始的,日期总共是八位,所以直接输入8就可以了。
输入命令:
replace eddt=\
把没有卸任期的,以右括号表示的替换成空值。
输入命令:
gen stdt1=date(stdt,\format stdt1 üY_N_D
gen eddt1=date(eddt,\
format eddt1 üY_N_D
把日期转换成数值型数据,并改变其显示格式。
2012/5/31
1. 本节课即计算各个国家各个银行roa roe asset的变化趋势 Sd是标准差是量化风险的主要指标
对于银行风险的量化指标有:sdroa sdroe z-score
2.先导入数据,把52个国家各个银行的数据转成dta文件,并全部合并,运用到两个循环 输入命令:
3.数据存在问题:首先变量名字太长;
其次是宽型数据;(国泰安数据库里面的数据就是长型数据) 最后是全部字符型数据
totalassetsusd2*命令含义:*的作用是,即只要是2000几年开头的数据就会被保留下来。 输入命令:
keep bankname indexnumber city countryname countrycode totalassetsusd2* returnonaverageassetsroaa2* returnonaverageequityroae2*
即把这些变量都保留下来,其他的都不要,2*就是把九几年的数据删除,只留下2000开头的数据。
更改变量的名字,因为变量很多,所以用循环来写: 输入命令:
forvalues i=2002(1)2010{ rename totalassetsusd`i' asset`i' rename returnonaverageassetsroaa`i' roa`i'
rename returnonaverageequityroae`i' roe`i' }
因为是对数字的循环,所以用forvalues循环,i从2002取到2010
4.数据类型:
宽型数据(一家银行是一条记录,变量名字很多,一行很宽) Bank asset2010??asset2002 1 a b 2 c d
长型数据-国泰安的数据(一家银行对应n条记录,变量名少,数据量多,即一列很长) Bank year asset 1 2010 a 1 2009 b 1 2008 c
如果要把宽型数据变成长型数据,就可以增加一个year的变量,这样就可以减少很多变量,后面直接跟asset就可以了。
5.reshape命令可以改变数据类型。
输入命令:
Reshape long stub,(宽型指标后面共同的部分) i(i) j(j)——ij是固定的,是必写的,每次改变的是括号里面i和j,i里面的是没有重复的基准变量,是主码,其每一条取值都是不同的,没有一条是重复的,如果有的话就会出错,所以用之前先duplicates drop 这样就可以把一个宽型数据变成一个长型数据。
针对本数据输入命令:
duplicates drop indexnumber,force
reshape long asset roa roe,i(indexnumber) j(year)
先删除重复的indexnumber,即重复的银行名字,然后将asset这个变量后面本身带的年份分离出来,生成一个新的年变量。
i后面跟的是主码,即不变的部分indexnumber;j后面跟的是一个新生成的变量。
之前做的分析师名字的ananm1 ananm2?等六个变量合并可以直接用reshape命令。
6.destring命令把字符型的数据转换成数值型的
数据里面有很多的n.a.是无效数据,要先把这些数据变成“.”,不然直接把字符型数据一起转成数值型数据的时候会出错,很多数据无法识别。
输入命令:
foreach file in asset roa roe{
replace `file'=\.\==\(记得要用双等号) }
用循环命令,把三个变量asset roa roe里面的n.a.全部变成“.”
输入命令:
destring [varlist] , {generate(newvarlist)|replace} [destring_options]
这里既可以创建一个新的变量,用gen即把原变量也保留,或者直接覆盖原变量用replace
由于很多数据里面有逗号(如截图),所以要用一个option,叫做ignore即: ignore(\
也就是忽略掉数据里面的非数字型的字符型变量,即ignore(\这样就不会出错了。
本数据输入命令:
destring asset roa roe,replace ignore(\
把这三个变量都转换成数值型数据,且一个逗号也就是主体后面可以加多个option,replace ignore(\,这里有三个option,最后记得要强制执行。
输入命令:
drop if asset==.
把变量是点的值都删掉。
7.对数据做描述性统计 Sum()是函数 Sum是概括的命令
输入命令: sum asset roa roe
即会导出变量的基本信息,最大值最小值,平均值等等
Tabstat命令就是可以选择你想要导出的信息,即 tabstat varlist [if] [in] [weight] [, options]
输入命令:
tabstat asset roa roe,s(mean N sd max min) by(year)