文件与导入导出
先查看各命令展开的示例,再按需展开其他选项及 R 实现。改写代码前,请阅读适用条件及差异说明。
changeeol
将文本文件换行统一为 Unix 格式
Stata
changeeol source.txt destination.txt, eol(unix)R 包:base
writeBin(charToRaw(paste0(paste(readLines(src),collapse='\n'),'\n')),dst)固定流程示例;更改时需同时调整对象名与列名。
checksum
计算文件完整性摘要
Stata
checksum sample.txtR 包:tools
tools::md5sum(src)MD5 是工作流程替代;Stata checksum 使用 POSIX CRC,摘要数值不可直接比较。
copy
复制本地文件到新路径
Stata
copy source.txt destination.txtR 包:base
file.copy(src,dst,overwrite=FALSE)此可运行示例中的 src 与 dst 为临时路径;不涉及网络传输。
dir
列出文件夹中的 CSV 文件
Stata
dir "*.csv"R 包:base
list.files(path,pattern='[.]csv$',full.names=FALSE)固定流程示例;更改时需同时调整对象名与列名。
另有 1 个示例及替代实现
列出含点开头隐藏文件的文件
Stata
dir, allR 包:base
list.files(path,all.files=TRUE,no..=TRUE)与 Stata 有差异 R all.files 包括点文件;隐藏文件规则依操作系统而异。
export
导出不带变量名的 CSV
Stata
export delimited id x using sample.csv, novarnames replaceR 包: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, replaceR 包:utils
utils::write.csv(data[c('id','x')],path,row.names=FALSE,na='')导出制表符分隔表格
Stata
export delimited id x using sample.tsv, delimiters("\t") replaceR 包: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) replaceR 包:writexl
writexl::write_xlsx(data[c('id','x')],path)导出 SAS XPORT 第五版数据
Stata
export sasxport5 sample.xpt, replaceR 包:haven
haven::write_xpt(data,path,version=5,name='SAMPLE')固定流程示例;更改时需同时调整对象名与列名。
file
通过文本连接读取一行
Stata
file open handle using sample.txt, read text
file read handle line
file close handleR 包:base
con <- file(src,open='rt',encoding='UTF-8'); line <- readLines(con,n=1); 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
hexdump
以十六进制字节查看文件
Stata
hexdump sample.binR 包:base
bytes <- readBin(src,'raw',n=file.info(src)$size); format(bytes)固定流程示例;更改时需同时调整对象名与列名。
import
导入带表头的 CSV 文件
Stata
import delimited using sample.csv, clearR 包:utils
data <- utils::read.csv(path,stringsAsFactors=FALSE)固定流程示例;更改时需同时调整对象名与列名。
另有 10 个示例及替代实现
仅读取文本的指定行区间
Stata
import delimited using sample.csv, rowrange(3:4) varnames(nonames) clearR 包: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) clearR 包:utils
data <- utils::read.csv(path,colClasses=c('character','numeric'))固定流程示例;更改时需同时调整对象名与列名。
导入不带表头的 CSV 文件
Stata
import delimited using sample.csv, varnames(nonames) clearR 包: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") clearR 包:utils
data <- utils::read.delim(path,stringsAsFactors=FALSE)固定流程示例;更改时需同时调整对象名与列名。
导入前列出工作表名称
Stata
import excel using sample.xlsx, describeR 包:readxl
readxl::excel_sheets(path)固定流程示例;更改时需同时调整对象名与列名。
导入限定的 Excel 单元格矩形
Stata
import excel using sample.xlsx, sheet("Survey") cellrange(A1:B2) firstrow clearR 包:readxl
data <- readxl::read_excel(path,sheet='Survey',range='A1:B2')固定流程示例;更改时需同时调整对象名与列名。
读取指定名称的 Excel 工作表
Stata
import excel using sample.xlsx, sheet("Survey") firstrow clearR 包:readxl
data <- readxl::read_excel(path,sheet='Survey')固定流程示例;更改时需同时调整对象名与列名。
导入 SAS XPORT 第五版文件
Stata
import sasxport5 sample.xpt, clearR 包:haven
data <- haven::read_xpt(path)固定流程示例;更改时需同时调整对象名与列名。
导入 SPSS 系统文件
Stata
import spss using sample.sav, clearR 包:haven
data <- haven::read_sav(path)固定流程示例;更改时需同时调整对象名与列名。
infile
导入空白分隔的数值字段
Stata
infile id x using sample.txt, clearR 包:utils
data <- utils::read.table(path,col.names=c('id','x'),header=FALSE)用于简单无引号数值字段的自由格式示例。
infix
读取相邻定宽数值字段
Stata
infix id 1-2 x 3-5 using sample.txt, clearR 包:utils
data <- utils::read.fwf(path,widths=c(2,3),col.names=c('id','x'))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 后端。
mkdir
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 后端。
outfile
导出不带表头的逗号分隔字段
Stata
outfile id x using sample.csv, comma replaceR 包: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, replaceR 包:haven
haven::write_dta(data,path)与 Stata 有差异 R 对象名不作为 Stata 活动数据状态保存;haven 写入其支持的 Stata 元数据。
saveold
写入兼容 Stata 12 的 DTA 文件
Stata
saveold sample.dta, version(12) replaceR 包:haven
haven::write_dta(data,path,version=12)与 Stata 有差异 使用 haven 旧格式验证接受的列名;本例列名至少两个字符。
savespss
将数据保存为 SPSS 文件
Stata
savespss "data.sav", replaceR 包:haven
haven::write_sav(data, path)与 Stata 有差异 社区命令。haven 会写出变量标签和值标签,但遇到 Stata 标签缺失值(.a、.b)会报错。写出前须明确将其转换为普通 NA,或通过 haven::labelled_spss() 转换为选定的 SPSS 用户缺失代码。字符串宽度和显示格式也可能不同。
setroot
type
读取 UTF-8 文本文件行
Stata
type sample.txtR 包:base
readLines(src,encoding='UTF-8')与 Stata 有差异 返回文本行;可用 print 或 cat 显示在控制台。
unicode
unzipfile
将 ZIP 包解压到指定临时文件夹
Stata
unzipfile sample.zipR 包:utils
utils::unzip(archive,exdir=destination)与 Stata 有差异 R 显式指定解压文件夹;Stata 默认使用当前工作目录。
use
从 DTA 文件读取指定列
Stata
use id x using sample.dta, clearR 包:haven
data <- haven::read_dta(path,col_select=c('id','x'))