文件与导入导出

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

changeeol

将文本文件换行统一为 Unix 格式

Stata

changeeol source.txt destination.txt, eol(unix)

R 包:base

writeBin(charToRaw(paste0(paste(readLines(src),collapse='\n'),'\n')),dst)

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

用显式 Windows CRLF 字节写入文本

Stata

changeeol source.txt destination.txt, eol(windows)

R 包:base

writeBin(charToRaw(paste0(paste(readLines(src),collapse='\r\n'),'\r\n')),dst)

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

checksum

计算文件完整性摘要

Stata

checksum sample.txt

R 包:tools

tools::md5sum(src)

MD5 是工作流程替代;Stata checksum 使用 POSIX CRC,摘要数值不可直接比较。

将文件摘要保存为附属文本文件

Stata

checksum sample.txt, saving(sample.sum)

R 包:tools

digest <- tools::md5sum(src); writeLines(unname(digest),dst)

保存 R MD5 附属文件而非 Stata .sum 文件;Stata 无法将其作为 CRC 附属文件验证。

copy

复制本地文件到新路径

Stata

copy source.txt destination.txt

R 包:base

file.copy(src,dst,overwrite=FALSE)

此可运行示例中的 src 与 dst 为临时路径;不涉及网络传输。

使用本地副本覆盖目标文件

Stata

copy source.txt destination.txt, replace

R 包:base

file.copy(src,dst,overwrite=TRUE)

仅在新建临时文件中演示覆盖。

dir

列出文件夹中的 CSV 文件

Stata

dir "*.csv"

R 包:base

list.files(path,pattern='[.]csv$',full.names=FALSE)

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

另有 1 个示例及替代实现

列出含点开头隐藏文件的文件

Stata

dir, all

R 包:base

list.files(path,all.files=TRUE,no..=TRUE)

与 Stata 有差异 R all.files 包括点文件;隐藏文件规则依操作系统而异。

export

导出不带变量名的 CSV

Stata

export delimited id x using sample.csv, novarnames replace

R 包:utils

utils::write.table(data[c('id','x')],path,sep=',',row.names=FALSE,col.names=FALSE,quote=FALSE,na='')
另有 5 个示例及替代实现

将指定列导出为 CSV

Stata

export delimited id x using sample.csv, replace

R 包:utils

utils::write.csv(data[c('id','x')],path,row.names=FALSE,na='')

导出制表符分隔表格

Stata

export delimited id x using sample.tsv, delimiters("\t") replace

R 包:utils

utils::write.table(data[c('id','x')],path,sep='\t',row.names=FALSE,quote=FALSE,na='')

将所选列导出为 Excel 工作簿

Stata

export excel id x using sample.xlsx, firstrow(variables) replace

R 包:writexl

writexl::write_xlsx(data[c('id','x')],path)

导出 SAS XPORT 第五版数据

Stata

export sasxport5 sample.xpt, replace

R 包:haven

haven::write_xpt(data,path,version=5,name='SAMPLE')

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

将带标签数值导出为 SPSS 系统文件

Stata

export spss using sample.sav, replace

R 包:haven

haven::write_sav(data,path)

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

file

通过文本连接读取一行

Stata

file open handle using sample.txt, read text
file read handle line
file close handle

R 包:base

con <- file(src,open='rt',encoding='UTF-8'); line <- readLines(con,n=1); close(con)

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

写入并关闭 UTF-8 文本连接

Stata

file open handle using sample.txt, write text
file write handle "hello" _n
file close handle

R 包:base

con <- file(path,open='wt',encoding='UTF-8'); writeLines('hello',con); close(con)

示例显式关闭自己创建的临时连接。

filefilter

替换小文本文件中的指定文本

Stata

filefilter source.txt destination.txt, from("old") to("new")

R 包:base

writeLines(gsub('old','new',readLines(src),fixed=TRUE),dst,useBytes=TRUE)

与 Stata 有差异 适用于小文件的逐行流程;不处理二进制模式或大文件流式操作。

替换文本文件中的制表分隔符

Stata

filefilter source.txt destination.txt, from(\t) to(";")

R 包:base

writeLines(gsub('\t',';',readLines(src),fixed=TRUE),dst,useBytes=TRUE)

与 Stata 有差异 用于小文本文件的字面替换;表格中的带引号分隔符需使用解析器。

findfile

在指定文件夹中查找文件

Stata

findfile sample.txt, path(folder)

R 包:base

found <- list.files(folder,pattern='^sample[.]txt$',full.names=TRUE); stopifnot(length(found)==1L); normalizePath(found,winslash='/')

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

hexdump

以十六进制字节查看文件

Stata

hexdump sample.bin

R 包:base

bytes <- readBin(src,'raw',n=file.info(src)$size); format(bytes)

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

统计二进制文件中各字节值次数

Stata

hexdump sample.bin, analyze tabulate

R 包:base

table(as.integer(readBin(src,'raw',n=file.info(src)$size)))

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

import

导入带表头的 CSV 文件

Stata

import delimited using sample.csv, clear

R 包:utils

data <- utils::read.csv(path,stringsAsFactors=FALSE)

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

另有 10 个示例及替代实现

仅读取文本的指定行区间

Stata

import delimited using sample.csv, rowrange(3:4) varnames(nonames) clear

R 包:utils

data <- utils::read.csv(path,header=FALSE,skip=2,nrows=2,col.names=c('id','x'))

与 Stata 有差异 行号包括文件表头在内的物理行;本例 R 列名固定。

导入时保留编号前导零

Stata

import delimited using sample.csv, stringcols(1) clear

R 包:utils

data <- utils::read.csv(path,colClasses=c('character','numeric'))

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

导入不带表头的 CSV 文件

Stata

import delimited using sample.csv, varnames(nonames) clear

R 包:utils

data <- utils::read.csv(path,header=FALSE,col.names=c('id','x'))

与 Stata 有差异 R 显式指定 id 与 x 列名;Stata 在未重命名时会使用默认列名。

导入制表符分隔数据

Stata

import delimited using sample.tsv, delimiters("\t") clear

R 包:utils

data <- utils::read.delim(path,stringsAsFactors=FALSE)

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

导入前列出工作表名称

Stata

import excel using sample.xlsx, describe

R 包:readxl

readxl::excel_sheets(path)

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

导入限定的 Excel 单元格矩形

Stata

import excel using sample.xlsx, sheet("Survey") cellrange(A1:B2) firstrow clear

R 包:readxl

data <- readxl::read_excel(path,sheet='Survey',range='A1:B2')

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

读取指定名称的 Excel 工作表

Stata

import excel using sample.xlsx, sheet("Survey") firstrow clear

R 包:readxl

data <- readxl::read_excel(path,sheet='Survey')

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

导入 SAS XPORT 第五版文件

Stata

import sasxport5 sample.xpt, clear

R 包:haven

data <- haven::read_xpt(path)

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

导入 SPSS 系统文件

Stata

import spss using sample.sav, clear

R 包:haven

data <- haven::read_sav(path)

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

导入时识别空白与点号缺失标记

Stata

import delimited using sample.csv, clear

R 包:utils

data <- utils::read.csv(path,na.strings=c('','.'),stringsAsFactors=FALSE)

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

infile

导入空白分隔的数值字段

Stata

infile id x using sample.txt, clear

R 包:utils

data <- utils::read.table(path,col.names=c('id','x'),header=FALSE)

用于简单无引号数值字段的自由格式示例。

导入带引号文本与数值字段

Stata

infile str8 name x using sample.txt, clear

R 包:utils

data <- utils::read.table(path,col.names=c('name','x'),header=FALSE,stringsAsFactors=FALSE)

infix

读取相邻定宽数值字段

Stata

infix id 1-2 x 3-5 using sample.txt, clear

R 包:utils

data <- utils::read.fwf(path,widths=c(2,3),col.names=c('id','x'))

读取定宽字段并跳过间隔位

Stata

infix str3 code 1-3 x 5-6 using sample.txt, clear

R 包:utils

data <- utils::read.fwf(path,widths=c(3,-1,2),col.names=c('code','x'),stringsAsFactors=FALSE)

jdbc

将受控行追加到已有 SQL 表

Stata

jdbc insert id score, table("people")

R 包:DBI

DBI::dbAppendTable(con,'people',data); observed <- DBI::dbReadTable(con,'people'); DBI::dbDisconnect(con)

所示 Stata 示例要求已有 DSN/JDBC 连接。受控 SQLite 示例仅验证 SQL 或表操作,不验证 ODBC/JDBC 驱动连接;实际使用应选择适当 DBI 后端。

通过 DBI 后端载入完整 SQL 表

Stata

jdbc load, table("people")

R 包:DBI

data <- DBI::dbReadTable(con,'people'); DBI::dbDisconnect(con)

所示 Stata 示例要求已有 DSN/JDBC 连接。受控 SQLite 示例仅验证 SQL 或表操作,不验证 ODBC/JDBC 驱动连接;实际使用应选择适当 DBI 后端。

mkdir

创建文件夹

Stata

mkdir work

R 包:base

dir.create(path)

可运行示例在 R 临时目录中创建新文件夹。

odbc

查看数据库表字段名

Stata

odbc describe "people", dsn("research")

R 包:DBI

fields <- DBI::dbListFields(con,'people'); DBI::dbDisconnect(con)

所示 Stata 示例要求已有 DSN/JDBC 连接。受控 SQLite 示例仅验证 SQL 或表操作,不验证 ODBC/JDBC 驱动连接;实际使用应选择适当 DBI 后端。 此行只返回名称,不提供 Stata 字段类型报告。

通过 SQL 查询载入所选行

Stata

odbc load, exec("SELECT id, score FROM people WHERE score >= 20") dsn("research")

R 包:DBI

data <- DBI::dbGetQuery(con,'SELECT id, score FROM people WHERE score >= 20 ORDER BY id'); DBI::dbDisconnect(con)

所示 Stata 示例要求已有 DSN/JDBC 连接。受控 SQLite 示例仅验证 SQL 或表操作,不验证 ODBC/JDBC 驱动连接;实际使用应选择适当 DBI 后端。

查看数据库中的可用表

Stata

odbc query "research"

R 包:DBI

tables <- DBI::dbListTables(con); DBI::dbDisconnect(con)

所示 Stata 示例要求已有 DSN/JDBC 连接。受控 SQLite 示例仅验证 SQL 或表操作,不验证 ODBC/JDBC 驱动连接;实际使用应选择适当 DBI 后端。

outfile

导出不带表头的逗号分隔字段

Stata

outfile id x using sample.csv, comma replace

R 包:utils

utils::write.table(data[c('id','x')],path,sep=',',row.names=FALSE,col.names=FALSE,quote=FALSE,na='.')

导出纯数值字段并使用 Stata 缺失文本

Stata

outfile id x using sample.txt, replace

R 包:utils

utils::write.table(data[c('id','x')],path,sep=' ',row.names=FALSE,col.names=FALSE,quote=FALSE,na='.')

save

将数据表保存为当前 Stata DTA 文件

Stata

save sample.dta, replace

R 包:haven

haven::write_dta(data,path)

与 Stata 有差异 R 对象名不作为 Stata 活动数据状态保存;haven 写入其支持的 Stata 元数据。

saveold

写入兼容 Stata 12 的 DTA 文件

Stata

saveold sample.dta, version(12) replace

R 包:haven

haven::write_dta(data,path,version=12)

与 Stata 有差异 使用 haven 旧格式验证接受的列名;本例列名至少两个字符。

savespss

将数据保存为 SPSS 文件

Stata

savespss "data.sav", replace

R 包:haven

haven::write_sav(data, path)

与 Stata 有差异 社区命令。haven 会写出变量标签和值标签,但遇到 Stata 标签缺失值(.a、.b)会报错。写出前须明确将其转换为普通 NA,或通过 haven::labelled_spss() 转换为选定的 SPSS 用户缺失代码。字符串宽度和显示格式也可能不同。

setroot

依据标记文件定位项目根目录

Stata

setroot

R 包:rprojroot

root <- rprojroot::find_root(rprojroot::has_file('.here'),path=child)

使用显式 .here 标记与给定起点;Stata 命令还支持其他标记并保存全局宏。

type

读取 UTF-8 文本文件行

Stata

type sample.txt

R 包:base

readLines(src,encoding='UTF-8')

与 Stata 有差异 返回文本行;可用 print 或 cat 显示在控制台。

仅读取文本文件开头

Stata

type sample.txt, lines(1)

R 包:base

readLines(src,n=1,encoding='UTF-8')

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

unicode

将 Latin-1 文本转换为 UTF-8

Stata

unicode convertfile source.txt destination.txt, srcencoding("latin1") dstencoding("utf-8")

R 包:base

text <- readLines(src,encoding='latin1'); writeBin(charToRaw(paste0(iconv(text,from='latin1',to='UTF-8'),'\n')),dst)

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

unzipfile

将 ZIP 包解压到指定临时文件夹

Stata

unzipfile sample.zip

R 包:utils

utils::unzip(archive,exdir=destination)

与 Stata 有差异 R 显式指定解压文件夹;Stata 默认使用当前工作目录。

use

从 DTA 文件读取指定列

Stata

use id x using sample.dta, clear

R 包:haven

data <- haven::read_dta(path,col_select=c('id','x'))
另有 1 个示例及替代实现

读取 DTA 文件前几行观测

Stata

use sample.dta in 1/3, clear

R 包:haven

data <- haven::read_dta(path,n_max=3)

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

zipfile

创建含文本文件的 ZIP 压缩包

Stata

zipfile sample.txt, saving(sample.zip)

R 包:zip

zip::zipr(archive,src)

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