. sort price //按价格从低到高重新排序
. by foreign: sum price weight *not sorted
/* 系统提示没有排序,这是因为by varlist 在执行时要求内存中的数据是按照
by 后面的变量排序的。当我们用sort price 重新排序后,就打乱了原来按照
foreign 的排序,所以出现了错误提示。更正的办法是:*/
. sort foreign //按国产车和进口车排序 . by foreign: sum price weight
*更简略的方式是把两个命令用一个组合命令来写。
. by foreign, sort: sum price weight
如果不想从小到大排序,而是从大到小排序,其命令为 gsort。
.gsort - price /按价格从高到低排序 . gsort foreign –price /*先把国产车都排在
前,进口车排在后面,然后在国产车内再按价格从大小到排序,在
进口车内部,也按从大到小排序*/
2.5 赋值及运算=exp
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [, options]
例:生成一个新的价格变量nprice,该变量的取值为原汽车价格变量price 的基础上涨10 元 . cd d:/stata9 . use auto, clear
. gen nprice=price+10 //生成新变量nprice,其值为price+10 . list price nprice //比较一下两个变量的取值
/*上面的命令generate(略写为gen) 生成一个新的变量,新变量的变量名为 nprice,新的价格在原价格的基础上均增加了10 元。
. replace nprice=nprice-10 /*命令replace
则直接改变原变量的赋值,nprice 调减后与price 变量取值相等*/
. list price nprice //再比较一下两
个变量,相等。
2.6 条件表达式if exp
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [, options]
例:若只想查看国产车的品牌和价格,则加入筛
选条件if foreign==0 */
. cd d:/stata9
. use auto, clear
. list make price if foreign==0
*只查看价格超过1 万元的进口车(同时满足两
个条件),则
. list make price if foreign==1 & price>10000 *查看价格超过1 万元或者进口车(两个条件任
满足一个)
. list make price if foreign==1 | price>10000 *分类型查看价格超过1 万元的汽车的品牌和价
格
. by foreign, sort: list make price if price>10000
2.7 范围筛选in range
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [, options]
如果要计算较低的前10 台车的平均价格,则要
先按价格排序,然后仅对前10
个车的价格求平均值 . cd d:/stata9 . use auto, clear . sort price . sum price in 1/5
注意“1/5”中,斜杠不是除号,而是从1 到5 的
意思,即1,2,3,4,5。
如果要计算前10 台车中的国产车的平均价格,
则可将范围和条件筛选联合使用。
. sum price in 1/10 if foreign==0
2.8 加权weight
[by varlist:] command [varlist] [=exp] [if exp] [in range] [weight] [, options]
任务:下表是2005 年湖北省高考640 分及以上成绩一分一段的人数统计,第一
列score 为高考分数,第二列num 为该分数段的人数。现在我们要求640 分及以
上考生的平均分数。 score num
650 193 649 26 648 23 647 16 646 21 645 26