内容发布更新时间 : 2024/11/5 16:31:15星期一 下面是文章的全部内容请认真阅读。
来表示,如果要将其全部替换为“.”,或者反之,将“.”替换为-9996,命令 为:
. mvencode age,mv(-9996) . mvdecode age,mv(-9996) 3.3 数据类型转化
任务:将 destring1, destring2 和tostring 中的数据类型进行相互转化
*3.3.1 字符型转化成数值型:destring
*destring1数据中的数据全为字符型,转换为数值型 .webuse destring1, clear
.des /*注意到所有的变量存贮类型(storage type)均为字符型str#,
其中#号表示字符串长度*/
Contains data from http://www.stata-press.com/data/r9/destring1.dta obs: 10
vars: 5 3 Mar 2005 10:15
size: 240 (99.9% of memory free) storage display value
variable name type format label variable label id str3 %9s num str3 %9s code str4 %9s total str5 %9s income str5 %9s
.sum //因为所有变量为字符型,所以不能进行数值计算 .gen nincom=incom+10 //因字符不能进行四则运算,不能进行加法运算
*type mismatch //系统提示类型不匹配,因为income 为字符型,10 为数值型 .destring, replace //全部转换为数值型,replace 表示将原来的变量(值)更新 .sum //注意到转换为数值型后,可以求五数概略了 .gen nincom=income*1.3 //转换后,可以运算,工资终于涨了30%! .list nincom income //工资终于涨了30%!
*----------------将字符型数据转换为数值型数据:去掉字符间的空格------------ *destring2 数据集中的data 变量为字符型,且年月日间有空格,转移为数据型 .webuse destring2, clear
.des //注意到所有的变量均为字符型 str .list date //注意到date 年月日之间均有空格 date
------------ 1. 1999 12 10 2. 2000 07 08 3. 1997 03 02 4. 1999 09 00
.destring date, replace //想把date 转换成数值型,但失败了,系统提示说 *date contains non-numeric characters; no replace /*由于含有非数值型字符
(即空格),因此没有更新,也即转换命令没有执行。*/
.destring date, replace ignore(“ ”) /*忽略空格,然后转换,注意这里的” “中
间有一个空格,不是””。*/
date: characters space removed; replaced as long //成功转换为long 型 .des //注意到date 的storage type 已变为long .list date //注意到空格消失了 date ---------- 1. 19991210 2. 20000708 3. 19970302
/*与date 变量类似,变量price 前面有美元符号,变量percent 后有百分号, 换为数值型时需要忽略这些非数值型字符。*/
.destring price percent, gen(price2 percent2) ignore(“$ ,%”)
.list //注意到price2 前面的$号消失,percent2 后面的%号消失 date price price2 percent percent2
--------------------------------------------------------- 1. 19991210 $2,343.68 2343.68 34% 34 2. 20000708 $7,233.44 7233.44 86% 86
.d //注意到price2 和percent2 均变为数据值型变量double 和byte *3.3.2 数值型转化为字符型:tostring
.webuse tostring, clear /*该数据中年月日的数据类型不一样,不能直接相加
生成一个反映日期的新变量*/
.des //注意到month 为字符型,而年和日为数值型 .list
.gen date1=month+”/”+day+”/”+year //将年月日构成一个新的日期变量 type mismatch //由于month 为字符型,年和日为数值型,不同类型不能相加 r(109);
.tostring year day, replace //将年和日转化为字符型 .des //注意到,现在全部变为字符型
.gen date1=month+”/”+day+”/”+year //将年月日构成一个新的日期变量 .list //生成了一个新的变量date1,其为三个字符串和两个”/”符号连接而成 .gen date2=date(date1,”mdy”) /* date()为日期函数,它以1960 年1 月1
日为第0 天,计算从那天起直到括号中指定的某天date1 一共过了多少天。”mdy”指定date1 的排列顺序,这里是 按照月日年的顺序来表示日期。*/
.list //新生成的date2 表示总天数
*小游戏:请算算你活了多少天?示例:一个生于1975 年12 月27 日的家伙, 他活了?
.di date(“1975/12/27”,”ymd”)
3.4 数据显示格式:format
/*format 只控制数据的显示格式,并不改变内存中数据的大小。*/ .webuse census10,clear //美国人口普查数据
.des //第三列显示了数据的格式display format storage display value
variable name type format label variable label state str14 s State
region int %8.0g cenreg Census region pop long .0g Population medage float %9.0g Median age
*注意到, stata 变量的格式为s,表示右对齐,共14 个字符,%为固定用法 .list in 1/4 //注意不同的显示格式:均为右对齐 state region pop medage
------------------------------------------ 1. Alabama South 3893888 29.3 2. Alaska West 401851 26.1 3. Arizona West 2718215 29.2 4. Arkansas South 2286435 30.6
.format state %-14s // 该命令使stata 的显示格式左对齐,14 前面多了个负号 .list in 1/4 //注意不同的显示格式,state 现在左对齐了 +------------------------------------------+ state region pop medage
------------------------------------------ 1. Alabama South 3893888 29.3 2. Alaska West 401851 26.1 3. Arizona West 2718215 29.2 4. Arkansas South 2286435 30.6
.format region %-8.0g / *region 变量看起来是字符型变量,但实际上为
数据型,它也可以左对齐,同样是加一个负号.
.list in 1/4 //注意region 现在左对齐了
.format pop .0gc /*pop 的显示格式为.0g,后面加上c,则每三位数间
用逗号分开,c 为comma 的意思.*/
.list in 1/4 //结果加上了逗号,但是第五个观察值没有任何变化 state region pop medage
------------------------------------------- 1. Alabama South 3,893,888 29.3 2. Alaska West 401,851 26.1 3. Arizona West 2,718,215 29.2 4. Arkansas South 2,286,435 30.6 5. California West 23667902 29.9
*因为这个数太大,加逗号将超过11 位数,我们可以先把总的位数增加 .format pop .0gc //把pop 显示总长度数增加到12 位 .list in 5 //现在所有的pop 都按逗号分开了 5. California West 23,667,902 29.9
.format medage %8.1f //要求所有的medage 都显示一位小数 .list in 1/4
state region pop medage
-------------------------------------------- 1. Alabama South 3,893,888 29.3 2. Alaska West 401,851 26.1 3. Arizona West 2,718,215 29.2 4. Arkansas South 2,286,435 30.6
.gen id=_n //生成一个新变量id,取值依次为1,2,3 .replace id=9842 in 3 //将id 的第三个变量替换为9842 .list in 1/3
state region pop medage id
-------------------------------------------- 1. Alabama South 3893888 29.3 1 2. Alaska West 401851 26.1 2
3. Arizona West 2718215 29.2 9842
.format id .0f //对于编号,我们希望前面用零使得位数对齐 .list in 1/3 //注意到通过在前面补零,所有的id 都成了5 位数。 state region pop medage id
-------------------------------------------------- 1. Alabama South 3893888 29.3 00001 2. Alaska West 401851 26.1 00002 3. Arizona West 2718215 29.2 09842
3.5 在STATA 中直接录入数据:input
3.5.1 菜单式操作
任务:按学号录入五个学生的经济学成绩
id economy 1 40 2 80 3 90 4 70 5 53
操作:(1)点击图标列中录入另五个成绩
>>在打开的数据表格第一列中录入五个姓名>>在第二
双击 var1 弹出对话框>>将变量改名为id>>在label 中写入学号>>退出弹出窗口; 双击 var2 弹出对话框>>将变量改名为name>>在label 中写入姓名>>关闭数据编辑器
(2)点击图标保存数据>>给数据命令为student >>退出
在建立数据文件后,如果没有存盘,这个文件即是一个“临时的”数据文件,它将随着退出STATA 系统时而消失。当数据文件被存储在后,它将成为一个“永久性”的数据文件,用户可以在以后经常使用它而不必重新建立之。
3.5.2 命令操作
任务:按学号录入五个学生的学号和姓名
id name economy 1 John 40 2 Chris 80 3 Jack 90 4 Huang 43 5 Tom 70
操作:在command 窗口中键入(注:前面的点号不必健入,每完成一行按回车键,