编程工具
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
about
adopath
args
continue
跳过某次循环的剩余步骤
Stata
forvalues i=1/4 {
if `i'==2 continue
display `i'
}R 包:base
out <- integer(); for (i in 1:4) { if(i==2) next; out <- c(out,i) }固定流程示例;更改时需同时调整对象名与列名。
creturn
dataex
error
exit
ftools
gettoken
分离首个简单词元与剩余文本
Stata
gettoken first rest : textR 包:base
parts <- strsplit(text,' +')[[1]]; first <- parts[1]; rest <- paste(parts[-1],collapse=' ')与 Stata 有差异 仅用于不带引号的简单空白词元;不复刻 Stata 引号与 bind 规则。
include
mark
markin
markout
marksample
matlist
格式化显示数值矩阵
Stata
matlist X, format(%9.2f)R 包:base
format(X,nsmall=2,trim=TRUE)与 Stata 有差异 返回字符矩阵;R 不复制 Stata 边框与方程标题。
matname
mkmat
从指定数值变量创建矩阵
Stata
mkmat x y, matrix(X)R 包:base
X <- as.matrix(data[c('x','y')])与 Stata 有差异 X 是固定矩阵对象名;R 行名不一定匹配 Stata 的 r1、r2 标签。
numlist
展开固定步长数值列表
Stata
numlist "1(2)9"R 包:base
values <- seq(1,9,by=2)直接构造本例列表;不解析任意 Stata numlist 字符串。
post
postclose
postfile
query
require
要求 R 流程依赖已安装
Stata
require ftoolsR 包:base
stopifnot(requireNamespace('dplyr',quietly=TRUE))检查 R 对应依赖 dplyr;不安装包,Stata 包名也不自动转换。
sleep
svmat
将矩阵列转为具名变量
Stata
svmat X, names(col)R 包:base
data <- as.data.frame(X)与 Stata 有差异 创建新数据表;合并到已有数据集需显式对齐行或键。
syntax
验证数值列参数与可选标量
Stata
syntax varname(numeric) [, Scale(real 1)]R 包:base
scaled_sum <- function(data,var,scale=1) { stopifnot(length(var)==1L,var %in% names(data),is.numeric(data[[var]]),is.numeric(scale),length(scale)==1L); sum(data[[var]],na.rm=TRUE)*scale }使用 R 形式参数与显式检查;不解析 Stata 命令语法。
sysdir
tempfile
生成唯一临时文件路径
Stata
tempfile cacheR 包:base
path <- tempfile(fileext='.rds')与 Stata 有差异 tempfile() 只生成名称而不创建文件;R 不保证函数退出时按 Stata 方式清除每个命名文件。
tempname
tempvar
tokenize
拆分带引号短语与单词
Stata
tokenize "alpha beta" gammaR 包:base
tokens <- scan(text='"alpha beta" gamma',what=character(),quiet=TRUE)与 Stata 有差异 演示基本双引号空白分词;Stata 复合引号无自动对应。
拆分简单空白分隔词元
Stata
tokenize alpha beta gammaR 包:base
tokens <- strsplit('alpha beta gamma',' +')[[1]]与 Stata 有差异 R 返回字符向量而非位置局部宏;带引号词元的解析不同。
unab
解析无歧义的缩写列名
Stata
unab vars : incomeR 包:base
vars <- names(data)[pmatch('income',names(data),duplicates.ok=FALSE)]; stopifnot(!anyNA(vars))R 需要显式请求部分匹配;精确匹配优先。