跳转到内容

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 文件

[编辑 | 编辑源代码]

最佳实践是将您的个人 ado 文件存储在个人目录中。

. personal dir
your personal ado-directory is /Applications/Stata/ado/personal/

帮助文件

[编辑 | 编辑源代码]

帮助文件使用特定的标记语言。您可以在文本编辑器中打开帮助文件并查看语法。

类 Unix 函数

[编辑 | 编辑源代码]
  • 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

Shell 程序调用 Stata

[编辑 | 编辑源代码]

对于持续的项目,您可能希望将 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 文件不同的目录中的方法。

参考文献

[编辑 | 编辑源代码]
  1. http://www.stata.com/statalist/archive/2010-01/msg00537.html
  2. http://www.stata.com/statalist/archive/2011-07/msg00559.html
上一个:图形 索引 下一个:Mata
华夏公益教科书