# batch **Repository Path**: code-fox/batch ## Basic Information - **Project Name**: batch - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-07-30 - **Last Updated**: 2026-07-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # batch A Stata command that applies a command template to every variable in a varlist. ## Install ```stata * Latest version cap ado uninstall batch net install batch, from("https://raw.githubusercontent.com/codefoxs/batch/main/") replace * Old versions cap ado uninstall batch net install batch, from("https://raw.githubusercontent.com/codefoxs/batch/v#.#.#/") replace ``` ## Quick use `@` 代表当前变量名,`@@` 代表它在 varlist 中的序号(从 1 起),`batch` 把模板对 varlist 里每个变量套一遍。 ```stata * 基本用法 batch price mpg, f(gen l@ = log(@)) //-> gen lprice = log(price) //-> gen lmpg = log(mpg) * @@ 是序号,从 1 开始 batch price mpg weight, f(gen v@@ = @) //-> gen v1 = price //-> gen v2 = mpg //-> gen v3 = weight * 时序算子 xtset company year batch invest mvalue, f(gen F@ = F.@) * 批量填补缺失值 batch _all, f(replace @ = 0 if @ == .) * 多条模板用 \ 分隔,对每个变量依次执行 batch price mpg, f(gen l@ = log(@) \ label var l@ "log of @") * 先预览不执行 batch price mpg, f(gen l@ = log(@)) dryrun * 出错不中断,末尾汇总失败变量 batch _all, f(gen l@ = log(@)) continue * 目标变量已存在时默认跳过;要覆盖加 replace batch price mpg, f(gen l@ = log(@)) replace ``` ## Options | 选项 | 说明 | |---|---| | `format()` | 必填,命令模板。可简写 `f()`。`@` 替换为当前变量名,`@@` 替换为其序号,多条模板用 `\` 分隔 | | `replace` | 目标变量已存在时先 drop 再执行(默认是跳过该变量的整条模板链) | | `dryrun` | 只打印展开后的命令,不执行。可简写 `dry` | | `noisily` | 额外显示每条命令自身的输出。可简写 `n` | | `continue` | 某个变量出错时跳过它继续,结束时列出失败清单(默认出错即中止)。可简写 `cont` | ## Notes - **占位符只能用 `@` 和 `@@`。** 不能写 ``f(gen l`v' = log(`v'))`` —— Stata 会在命令送入 `batch` 之前展开宏,`` `v' `` 通常为空,会静默生成错误代码。 - 同一个变量的多条模板里,`@@` 的值相同,所以 `@` 和 `@@` 可以混用:`f(gen v@@ = @ \ label var v@@ "@")`。 - **除 `@` 外没有别的特殊字符。** 替换一趟做完(先 `@@` 后 `@`),`#`、`%`、`^` 等原样送给 Stata,`f(reg y @ i.a##i.b)`、`f(format @ %9.2f)` 都不需要转义。 - `gen`/`egen` 的目标变量已存在时,默认跳过该变量的**整条模板链**(而不是只跳过 `gen`),避免后面的 `label var l@` 误改一个无关的同名旧变量。 - 存在性检查只识别 `gen`/`egen` 家族;`clonevar` 一类由 Stata 原生报错兜住。 - 模板中的字面 `@` 无法转义,两个相邻的 `@` 一律按序号解释;模板中也不能出现 `\`。 ## Stored results | 名称 | 内容 | |---|---| | `r(nvars)` | varlist 变量数 | | `r(ncmds)` | 实际执行的命令条数(`dryrun` 时为 0) | | `r(nskipped)` | 因目标已存在被跳过的变量数 | | `r(nfailed)` | 执行出错的变量数 | | `r(varlist)` | 展开后的 varlist | | `r(skipped)` | 被跳过的变量名列表 | | `r(failed)` | 出错的变量名列表 | ## Test ```stata * 运行回归测试,全部通过显示 ALL TESTS PASSED do test_batch.do ```