编程工具

先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。

about

查看 R 版本与平台信息

Stata

about

R 包:utils

utils::sessionInfo()

报告 R 会话元数据;Stata 许可证与序列号没有 R 对应项。

adopath

查看 R 包库搜索路径

Stata

adopath

R 包:base

.libPaths()

R 包库代替 ado 搜索文件夹;此例仅读取当前路径。

args

在函数中接收两个位置参数

Stata

program define addtwo
args a b
display `a'+`b'
end

R 包:base

addtwo <- function(a,b) a+b

R 函数参数代替 Stata 位置宏;本例为固定程序。

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) }

固定流程示例;更改时需同时调整对象名与列名。

提前退出循环

Stata

forvalues i=1/4 {
    if `i'==3 continue, break
    display `i'
}

R 包:base

out <- integer(); for (i in 1:4) { if(i==3) break; out <- c(out,i) }

固定流程示例;更改时需同时调整对象名与列名。

creturn

查看 R 版本、平台、路径与数值限制

Stata

creturn list

R 包:base

list(version=R.version.string,platform=R.version$platform,working_directory=getwd(),machine=.Machine)

返回 R 自身设置与常量,而非 Stata c 类值。

dataex

为小型数据示例生成可复现 R 代码

Stata

dataex id x in 1/3

R 包:base

example <- data[1:3,c('id','x')]; text <- utils::capture.output(dput(example))

dput 输出 R 重建代码,不是 Stata input 代码或论坛标记。只分享已获准公开的数据。

error

在函数中抛出明确错误

Stata

error 198

R 包:base

fail <- function() stop('Invalid input',call.=FALSE)

R 条件对象代替 Stata 数字返回码;检查捕获本例故意抛出的错误。

exit

提前从函数返回

Stata

program define positive
args x
if `x'<=0 exit
display `x'
end

R 包:base

positive <- function(x) { if(x<=0) return(invisible(NULL)); x }

仅从函数返回;退出 R 进程会终止用户会话。

ftools

查看 R 数据操作包版本与可用性

Stata

ftools, version

R 包:utils

list(version=as.character(utils::packageVersion('dplyr')),available=requireNamespace('dplyr',quietly=TRUE))

报告所选 R 流程依赖 dplyr;不检查或编译 Stata Mata 库。

gettoken

分离首个简单词元与剩余文本

Stata

gettoken first rest : text

R 包:base

parts <- strsplit(text,' +')[[1]]; first <- parts[1]; rest <- paste(parts[-1],collapse=' ')

与 Stata 有差异 仅用于不带引号的简单空白词元;不复刻 Stata 引号与 bind 规则。

include

在当前求值环境执行辅助代码

Stata

include helper.do

R 包:base

sys.source(path,envir=environment())

本例仅执行受控临时 R 辅助文件;使用 R 语法替代 Stata do 文件。

mark

按条件生成纳入样本标记

Stata

mark touse if g == 2

R 包:base

data$touse <- as.integer(!is.na(data$g) & data$g==2)

markin

查找包含所选样本的行区间

Stata

markin if g == 2

R 包:base

selected <- which(data$g==2); interval <- range(selected)

仅返回包围行端点;所选行可能不连续,不能直接以整个区间代替筛选。

markout

所选变量不完整时清除纳入标记

Stata

markout touse x y

R 包:base

data$touse <- as.integer(data$touse==1 & stats::complete.cases(data[c('x','y')]))

marksample

按传入列名标记完整观测

Stata

syntax varlist
marksample touse

R 包:base

touse <- stats::complete.cases(data[vars])

R 显式接收列名;不读取 Stata syntax 状态或 if/in 限制。

matlist

格式化显示数值矩阵

Stata

matlist X, format(%9.2f)

R 包:base

format(X,nsmall=2,trim=TRUE)

与 Stata 有差异 返回字符矩阵;R 不复制 Stata 边框与方程标题。

matname

为矩阵列命名

Stata

matname X first second, columns(1..2)

R 包:base

colnames(X) <- c('first','second')

固定流程示例;更改时需同时调整对象名与列名。

mkmat

从指定数值变量创建矩阵

Stata

mkmat x y, matrix(X)

R 包:base

X <- as.matrix(data[c('x','y')])

与 Stata 有差异 X 是固定矩阵对象名;R 行名不一定匹配 Stata 的 r1、r2 标签。

排除整行缺失后创建矩阵

Stata

mkmat x y, matrix(X) nomissing

R 包:base

X <- as.matrix(data[stats::complete.cases(data[c('x','y')]),c('x','y')])

numlist

展开固定步长数值列表

Stata

numlist "1(2)9"

R 包:base

values <- seq(1,9,by=2)

直接构造本例列表;不解析任意 Stata numlist 字符串。

展开递减连续数值列表

Stata

numlist "5/1"

R 包:base

values <- seq(5,1,by=-1)

用于所示 Stata 列表的直接 R 序列流程。

post

追加一行结果观测

Stata

post handle (1) (2.5)

R 包:base

results <- rbind(results,data.frame(id=1L,value=2.5))

向 R 累积容器追加;最终文件需另行保存。

postclose

将累计结果表保存到磁盘

Stata

postclose handle

R 包:base

saveRDS(results,path)

将 R 累积容器最终存为 RDS,而非关闭 Stata postfile 句柄。

postfile

初始化带列类型的结果容器

Stata

postfile handle id value using results.dta, replace

R 包:base

results <- data.frame(id=integer(),value=double())

R 累积容器流程:先追加行,再单独保存;此步骤不打开磁盘句柄。

query

查看当前 R 输出设置

Stata

query output

R 包:base

options()[c('width','digits','scipen')]

仅读取 R 设置;这些是 R 特有选项,而非 Stata 参数名。

require

要求 R 流程依赖已安装

Stata

require ftools

R 包:base

stopifnot(requireNamespace('dplyr',quietly=TRUE))

检查 R 对应依赖 dplyr;不安装包,Stata 包名也不自动转换。

要求 R 流程依赖达到最低版本

Stata

require ftools >= 2.48.0

R 包:base

stopifnot(requireNamespace('dplyr',quietly=TRUE),utils::packageVersion('dplyr') >= '1.1.0')

R 对应包有独立的版本要求;1.1.0 支持本组示例使用的 .by 与 relationship 功能。

sleep

将毫秒转为秒后暂停执行

Stata

sleep 1

R 包:base

Sys.sleep(0.001)

R Sys.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

查看 R 安装与临时文件夹

Stata

sysdir list

R 包:base

list(home=R.home(),library=R.home('library'),temporary=tempdir())

显示 R 文件夹;Stata BASE/PLUS/PERSONAL 文件夹没有一一对应。

tempfile

生成唯一临时文件路径

Stata

tempfile cache

R 包:base

path <- tempfile(fileext='.rds')

与 Stata 有差异 tempfile() 只生成名称而不创建文件;R 不保证函数退出时按 Stata 方式清除每个命名文件。

tempname

在局部作用域使用临时标量

Stata

tempname total
scalar `total' = 10

R 包:base

local({ total <- 10; total*2 })

使用词法作用域隔离,而非生成唯一 Stata 临时对象名。

tempvar

在局部作用域使用临时向量计算

Stata

tempvar squared
generate `squared' = x^2

R 包:base

local({ squared <- data$x^2; sum(squared,na.rm=TRUE) })

R 局部作用域无需添加临时数据列;不生成 Stata 宏名。

tokenize

拆分带引号短语与单词

Stata

tokenize "alpha beta" gamma

R 包:base

tokens <- scan(text='"alpha beta" gamma',what=character(),quiet=TRUE)

与 Stata 有差异 演示基本双引号空白分词;Stata 复合引号无自动对应。

拆分简单空白分隔词元

Stata

tokenize alpha beta gamma

R 包:base

tokens <- strsplit('alpha beta gamma',' +')[[1]]

与 Stata 有差异 R 返回字符向量而非位置局部宏;带引号词元的解析不同。

unab

解析无歧义的缩写列名

Stata

unab vars : income

R 包:base

vars <- names(data)[pmatch('income',names(data),duplicates.ok=FALSE)]; stopifnot(!anyNA(vars))

R 需要显式请求部分匹配;精确匹配优先。

展开列名前缀通配符

Stata

unab vars : x*

R 包:base

vars <- grep('^x',names(data),value=TRUE)

处理所示简单前缀通配符;不是完整 Stata varlist 解析器。

unabcmd

在已知 R 选项中解析唯一缩写

Stata

unabcmd gen

R 包:base

full <- match.arg('mea',c('mean','median','sum'))

演示显式 R 选项匹配,不是 Stata 命令缩写翻译;Stata gen 对应 generate。

viewsource

查看指定 R 函数的函数体

Stata

viewsource mean.ado

R 包:base

body(base::mean.default)

读取 R 函数体,代替打开 Stata ado 源码编辑器。