Stata/编程
Stata 包含两种类型的宏:局部和全局。
- Stata 中的程序是一种函数。它接受参数并产生结果。
- 它检查程序是否已经存在。
. which hello /Applications/Stata/ado/personal/hello.ado
which hello cap program drop hello program define hello di "say hello" end hello program drop hello
程序也可以返回一个 r 类对象。
. clear . set obs 100 obs was 0, now 100 . gen u=invnorm(uniform()) . *** rclass . program example, rclass 1. return scalar x=1 2. end . example . ret list scalars: r(x) = 1
默认情况下,参数使用宏 `1`、`2`、…、`N` 调用。以下是如何工作的示例。该程序非常简单,只是显示任何参数。
. cap program drop tester . program tester 1. di "argument 1 is |`1'|" 2. di "argument 2 is |`2'|" 3. di "argument 3 is |`3'|" 4. di "argument 4 is |`4'|" 5. end . . tester argument 1 is || argument 2 is || argument 3 is || argument 4 is || . tester a b c argument 1 is |a| argument 2 is |b| argument 3 is |c| argument 4 is || . tester ab cd ee pei argument 1 is |ab| argument 2 is |cd| argument 3 is |ee| argument 4 is |pei|
最佳实践是将您的个人 ado 文件存储在个人目录中。
. personal dir your personal ado-directory is /Applications/Stata/ado/personal/
帮助文件使用特定的标记语言。您可以在文本编辑器中打开帮助文件并查看语法。
- rmdir 删除目录
- mkdir 创建一个新目录
- erase 删除文件
erase temp.dta
- shell 或 ! 执行 unix/dos 命令。例如,在 unix 环境(Mac/Linux)中,可以使用 iconv 命令行将编码从 macroman 更改为 latin1。
! iconv -f latin1 -t macroman dataxmlWin.xml > dataxmlMac.xml
- type 在结果窗口中打印文件。
type textfile.txt
- copy 将文件复制到磁盘
copy https://wikibooks.cn/wiki/Stata wikibook.txt
- filefilter 在文本文件中用另一个字符替换一个字符。以下命令从 temp1.txt 中删除引号并用 "-" 替换它们。
filefilter temp1.txt temp2.txt, from("\Q") to("-") replace
- tmpdir 提供临时工作目录
有时,您需要将数据集的编码从 latin1 转换为 macroman。您可以使用 unix iconv 命令。
cap prog drop win2mac prog define win2mac args basewin use `basewin', clear xmlsave dataxmlWin, doctype(dta) replace ! iconv -f latin1 -t macroman dataxmlWin.xml > dataxmlMac.xml xmluse dataxmlMac.xml, doctype(dta) end
对于持续的项目,您可能希望将 Stata 脚本嵌入到自动化工作流中。本节将向您展示如何从命令行运行 Stata do 文件。对于这些示例,您必须将 Stata 可执行文件的文件夹包含到您的 PATH 环境变量中。根据您的 Stata 版本(SE、MP、IC、Small),Stata 可执行文件可能也具有略微不同的名称。
如果您只是用 do 文件作为其唯一参数来调用 Stata,例如
StataSE myscript.do
那么 Stata 将以正常(交互式)模式打开,并根据您的用户偏好执行以下操作之一。它可能会执行脚本(运行 -do myscript.do-)或打开 do 文件编辑器(-doedit myscript.do-)。要设置此偏好,请打开 do 文件编辑器,然后转到“编辑”、“偏好”,并设置“从 Windows 打开 do 文件而不是执行它们”的选项。
或者,您可以以后台(批处理)模式调用 Stata,例如
StataSE /e do myscript.do
这将执行您的脚本,使 Stata 窗口保持最小化,并自动将所有内容记录到当前工作目录中的 myscript.log(在批处理模式下无法关闭此自动记录)。
在批处理模式下调用 shell 命令(!/shell/winexec)将无法从 Windows[1] 中工作。依赖这些命令的程序在这种情况下也将无法工作。示例包括:dirlist[2] 和 parallel。
默认情况下,Stata 将从 Shell 继承工作目录。例如
cd /myproject/ Stata /e do code/myscript.do
Stata 将以 /myproject 作为工作目录运行。日志文件也将位于那里,因此这是一种将日志文件保存在与 do 文件不同的目录中的方法。