sysuse auto
,
clear
list
price length weight
in
1
/
5
local v3
"price length weight"
//
将 price length weight 这组字符赋给暂元名 v3
list
`v3'
in
1
/
5
local cmd
"list"
//
将
list
这组字符赋给暂元名 cmd
`cmd
' `v3'
in
1
/
5
//
等价于
list
price length weight
in
1
/
5
local pre
"pri"
//
将 pri 这组字符赋给暂元名 pre
`cmd
' `pre'
tab rep`
=
26
*
3
'
//
等价于 tab rep78
,
注意到
26
*
3
=
78
*
类似地可以使用
global
来定义暂元
sysuse auto
,
clear
list
price length weight
in
1
/
5
global
v3
"price length weight"
//
将 price length weight 这组字符赋给暂元名 v3
list
$v3
in
1
/
5
//
等价于
list
price length weight
in
1
/
5
。
global
cmd
"list"
//
将
list
这组字符赋给暂元名 cmd
$cmd $v3
in
1
/
5
//
等价于
list
price length weight
in
1
/
5
**
Global 与 local 的区别
capt prog drop myprog
program myprog
//
定义程序 myprog
local i
=
"主程序局域"
//
定义局域暂元 i
global
j
=
"主程序全局"
//
定义全局暂元 j
di
as
txt
"`i' "
//
调用局域暂元 i,这里是显示暂元名 i 中的内容“主程序局域”,绿色
di
as
txt
"$j"
//
调用全局暂元 j,这里是显示暂元名 j 中的内容“主程序全局”,绿色
mysub
//
执行子程序体 mysub
di
as
error
"`i' "
//
再次调用局域暂元 i,显示暂元名 i 中的内容“主程序局域”
di
as
error
"$j"
//
再次调用全局暂元 j,显示 “子程序全局暂元” ,红色
capt prog drop mysub
prog mysub
//
定义子程序 myprog
local i
=
"子程序局域"
//
定义子程序中的局域暂元 i
global
j
=
"子程序全局"
//
定义子程序中的全局暂元 j
di
as
result
"`i'"
//
调用局域暂元 i,这里是显示暂元名 i 中的内容“子程序局域暂元”
di
as
result
"$j"
//
调用全局暂元 j,这里是显示暂元名 j 中的内容“子程序全局暂元”
myprog
//
执行主程序体 myprog
**
6.4
自带命令参数
captu prog drop listargs
prog listargs
di
"第一个参数为: `1' "
di
"第二个参数为: `2' "
di
"第三个参数为: `3' "
di
"第四个参数为: `4' "
listargs
listargs I love stata
listargs
"I love stata"
//
区别
local i
"I love stata"
//
区别
listargs `i'
listargs this
is
a test
listargs
"this is a test"
listargs
"this is"
"a stata test"
5
**
另一个办法是采用参数申明的方式。
captu prog drop listargs
prog listargs
args a b c d
di
"第一个参数为: `a' "
di
"第二个参数为: `b' "
di
"第三个参数为: `c' "
di
"第四个参数为: `d' "
listargs this
is
a test
listargs
"this is a test"
**
6.5
scale 标量
scalar a
=
2
//
赋予标量 a 的值为
2
dis a
+
2
//
a
+
2
=
2
+
2
=
4
scalar b
=
a
+
3
//
b
=
a
+
3
=
2
+
3
=
5
di b
//
结果窗口显示出:
5
scalar s
=
”hello”
//
标量也可以为字符型
di s
//
结果窗口显示出
:
hello
clear
set
obs
3
input
a
scalar b
=
3
gen v1
=
a
*
b
//
回忆线性代数,该命令相当于对 a 的每个值乘 b
(
即
3
)
input
b
gen v2
=
a
*
b
//
注意 v1 与 v2 这两个命令完全相同
list
//
v1 与 v2 结果不同,表明 STATA 优先进行变量相乘
gen v3
=
a
*
scalar
(
b
)
//
当 b 即是变量名又是标量名时,标量相乘时要指明标题
sysuse auto
,
clear
sum
price
return
list
//
计算结果同时被存入到如下的标量中
local
sum
=
r
(
sum
)
//
将总和存入一个叫
sum
的暂元中
di `
sum
'
**
6.6
临时变量和临时数据文件
:
tempvar 和 tempfile
**
**
*
clear
set
obs
5
tempvar x y
//
指明临时变量名为 x 和 y
gen `x'
=
_n
//
生成临时变量`x’,取值为
1
,
2
,
3
,
4
,
5
gen `y'
=
_N
//
生成临时变量`y’,取值为
5
,
5
,
5
,
5
,
5
edit
//
查看数据编辑器,却并没有变量
gen z
=
`x
'+`y'
//
将两个临时变量相加,得到新变量 z
edit
//
查看数据库,只有新变量 z
**
**
*
use auto
,
clear
preserve
//
表明下面的操作将不破坏当前数据中的文件
keep price weight
//
仅保留 price 和 weight 这两个变量
save master
,
replace
//
保存新数据文件 master,该数据包含两个变量
drop weight
//
再去掉变量 weight,当前数据中只剩一个变量 weight
save part1
,
replace
//
保存新数据文件 part1,该数据包含一个变量
use master
,
clear
drop price
rename weight price
append using part1
erase master
.
dta
erase part1
.
dta
restore
//
回到 preserve 命令之前的数据集,即 auto
**
**
**
/
*
这是一个坏程序,因为中间性数据文件 master 和 part 并不是我们想要的,即使最后有 erase
命令将其删除,一旦在此前强行退出,仍会导致这两个不必要的文件占用空间并造成混乱。
*
/
**
**
**
preserve
keep price weight
tempfile master part1
save “`master’”
drop weight
save “`part1’”
use “`master’”
,
clear
drop price
rename weight price
append using “`part1’”
restore
/
*
在这种情形下,无论是出现运行错误还是中途中止,都不会破坏原数据文件,也不会产生
垃圾文件。
*
/
计算机简介
现代计算机设备的组成部分包括运算器、控制器、存储器、输入设备、输出设备,。还可以概括为以下三点: IO:与外部部件交互:磁盘、网卡CPU:运算器、控制器;CPU指令集(特权指令:OS运行特权指令、普通指令:应用
程序
运行)
OS:operating system(操作系统):一种软件
程序
,其作用如下:
译者:谢作翰 | 连玉君 | (知乎 | 简书 | 码云)
原文链接:Princeton
Stata
在线课程 (Princeton University -
Stata
Tutorial )
Stata
现场培训报名中