温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
作者: 徐云娇 (厦门大学)
邮箱: jilyo@stu.xmu.edu.cn
目录
一场新冠肺炎疫情,改变了传统的线下考试模式,很多学校期末考试的收卷、改卷、归档已经全面实现了无纸化。线上考试尽管可以跨越空间的约束解决学校的燃眉之急,但后期助教们在对学生 PDF 试卷进行建档的时候,大多工作都是一些重复劳动,于是我们便想利用 Stata 实现一些优化。
原始答卷是学生以 “姓名+学号” 作为命名的分录题作答的 PDF 文档,以及以 “姓名” 作为命名的选择题答题结果的 PDF 文档,如图:
学院对学生试卷建档的具体要求是:
为班级中每个同学建立专属的文件夹,命名规则为:姓名+学号;
将每个学生选择题和分录题的两份 PDF 放入他们对应的文件夹内。
forvalue
的循环语句失效;dir
命令批量提取 PDF 文档文件名称时,文件名称中的空格也将被保留下来,且文件名的后缀名也无法去除;
Stata 循环语句 (foreach
)
处理文字的函数 (subinstr
、substr
)
以下是解决上述问题的 Stata 程序:
clear
cd C:\Users\jilyo\Desktop\分录题
local file1: dir "\Users\jilyo\Desktop\分录题" files "*.pdf" //读取分录题文件夹中 PDF 的文件名
dis `file1'
foreach file in `file1'{
local file2 = subinstr("`file'",".pdf","",.) //去掉文件名后缀.pdf
local file3 = subinstr("`file2'"," ","",.) //去掉文件名中的空格
local files "`files' `file3'" //将全部处理过的文件名存在一个暂元中
}
dis "`files'"
foreach file in `files'{
local subname = substr("`file'",1,6) //提取每个文件名前两个中文字符,后续匹配之用
dis "`subname'"
mvfiles, infolder(".") outfolder(./`file') ///
match(`subname'*) makedirs erase //为每一个 PDF 建立一个同名文件夹,并且将分录题 PDF 放入文件夹中
mvfiles, infolder("\Users\jilyo\Desktop\选择题") outfolder(./`file') ///
match(`subname'*) erase //将选择题 PDF 放入文件夹中
}
以上命令解决问题的步骤如下:
dir
命令批量提取存放于电脑桌面的 “期末考试” 这一文件夹中所有 .pdf 格式文件的文件名称,并将其存放于 file1
这个暂元中;
file1
暂元中存放的文件名中含有文档的后缀名 .pdf,这会导致后续使用mvfiles
命令批量创建的文件夹名称中也含有 .pdf 字样,不美观且不符合学院要求。
subinstr
命令去除 file1
文件名的后缀名,并将结果存放于 file2
暂元中;暂元
file2
中存放的单个文件名中存在空格,在没有 .pdf 后缀的情况下,如果保留空格,则会导致后面的foreach
循环语句识别混乱,比如 “张三 12345” 经过循环之后会创建出 “张三” 和 “12345” 两个文件夹。
按照同样的思路,利用 subinstr
命令去除 file2
文件名中的空格,并存放于file3
暂元中;
将每次循环的结果保存在 files
暂元中;
foreach
以及 mvfiles
命令批量创建以暂元 files
中元素命名的文件夹,即以学生 “姓名+学号” 命名的文件夹;部分 PDF 答卷命名中包含空格,所以在匹配 PDF 文件并将其拖入对应名称的文件夹过程中出现困难,比如学生将其 PDF 答卷命名为 “张三 12345” (含有空格),但
mvfiles
命令在匹配时寻找的是“张三12345” (不含空格),所以张三同学的答卷便未能被拖入以 “张三12345” 命名的文件夹内;
利用 substr
命令提取暂元 files
中元素的前 6 个字符,比如 “张三12345” 将被提取 “张三” 这两个中文,将提取结果存放于 subname
暂元中;
最后, mvfiles
命令会将 “分录题” 和 “选择题” 文件夹中含有 “张三” 字段的 PDF 文件放置于以 “张三12345” 命名的文件夹中,并删除原始的 PDF 文件。
处理之后为每个学生新建了一个文件夹,命名规则是 “姓名+学号”。
每一个文件夹打开都是对应学生分录题和选择题的答卷。
应用场景拓展:此批量整理 PDF 文档的方法同样适用于文献管理,假如下载了一批文献之后想为这些文献创建同名文件夹,日后存放文章的代码或者学习笔记等,那么便可利用此方法快速创建。
关于推文涉及命令更详细的语法帮助,可在 Stata 中键入:
help mvfiles
help macro
help extended_fcn
help rcd
// 自循环,外部命令
help uall
// adoedit uall.ado 可以查看内部语句
连享会-直播课 上线了!
http://lianxh.duanshu.com
免费公开课:
直击面板数据模型 - 连玉君,时长:1小时40分钟 Stata 33 讲 - 连玉君, 每讲 15 分钟. 部分直播课 课程资料下载 (PPT,dofiles等)
支持回看,所有课程可以随时购买观看。
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 ⭐ | DSGE, 因果推断, 空间计量等 | |
⭕ Stata数据清洗 | 游万海 | 直播, 2 小时,已上线 |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
Note: 部分课程的资料,PPT 等可以前往 连享会-直播课 主页查看,下载。
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会学习群-常见问题解答汇总:
✨ https://gitee.com/arlionn/WD