Description
append将存储在磁盘上的Stata格式数据集附加到内存中数据集的末尾。 如果指定了任何没有扩展名的文件名,则假定为.dta .Stata还可以将来自两个数据集的观察结果合并为一个。参考[D] merge.参考[U] 22 Combining datasets有关append,merge和joinby的比较.
Quick start
将mydata2.dta追加到mydata1.dta,内存中没有数据
append using mydata1 mydata2
如上所述,但mydata1.data在内存中
append using mydata2
如上所述,并生成 generate(newv)以指示源数据集
append using mydata2, generate(newv)
如上所述,但不要从mydata2.dta复制值标签或注释
append using mydata2, generate(newv) nolabel nonotes
仅保留mydata2.dta中的v1,v2和v3
append using mydata2, keep(v1 v2 v3)
Syntax
append using filename [filename ...] [, options]
您可以用双引号括起文件名,也可以不用。如果文件名包含空格或其他特殊字符,则必须用双引号括起文件名。
options
generate(newvar): newvar标志着结果观察的来源。
keep(varlist): 防止指定变量追加数据集。
nolabel: 不要从磁盘上的数据集复制值标签定义
nonotes: 不要从磁盘上的数据集复制备注
force: 强制将字符串追加到数字或数字到字符串,没有出现错误。
generate(newvar)指定要创建的变量的名称,该变量将标记观察源。 来自master dataset,的观察(append命令之前的内存中的数据),该变量将包为0。 来自第一个using dataset,的观察值,该变量将为1; 来自第二个using dataset的观测值该变量将为2; 等等。
keep(varlist) 指定要using dataset保留的变量。 如果未指定keep(),则保留所有变量。
keep(varlist)中的varlist与标准Stata varlists的不同之处在于两种方式:varlist中的变量名称可能不会缩写,除非使用通配符,并且您可能不会引用一系列变量,例如price-weight。
nolabel 可防止Stata将磁盘数据集中的值标签定义复制到内存中的数据集中。 即使您未指定此选项,也不会从磁盘数据集中定义标签定义替换已在内存中的定义。
nonotes 可防止using dataset中的注释合并到结果中。 默认设置是合并using dataset中尚未出现在主数据中的注释。
force允许将字符串变量附加到数值变量,反之亦然,从而导致using dataset中缺少值。 如果省略,追加会发出错误消息; 如果指定,追加发出警告消息。
Description
appendappend将存储在磁盘上的Stata格式数据集附加到内存中数据集的末尾。 如果指定文件名没有扩展名的,则假定为.dta格式。
Stata还可以将两个数据集中的观测值合并为一个; 参见[U] 22组合数据集以进行追加,合并和连接的比较。 see [D] merge. See [U] 22 Combining datasets for a comparison of append, merge, and joinby.
Example 1
我们有两个想要合并的数据集存储在磁盘上。 第一个数据集,称为even.dta。 第二个数据集名为odd.dta。 数据集是
我们将even data 附加到odd data的末尾。 因为odd data已经存在于内存中(我们刚刚在上面使用过它们),所以我们键入append using even。 结果是:
因为number variable在两个数据集中,所以使用文件even.dta中的新数据扩展了变量。 因为在新数据中没有称为odd的变量,所以对odd的附加观察是向前填充缺失(.)。 因为在原始数据中没有被称为even的变量,所以对even的第一个观察结果都是缺失(.)。
Example 2
两个数据集中的变量顺序无关紧要。 Stata总是按名称附加变量:
结果与第一个例子中的结果相同。
当Stata追加两个数据集时,内存中数据集的定义(称为master
dataset)会覆盖磁盘上数据集的定义(称为using dataset)。这延伸到标签、可变标签、特性和日期时间戳。如果数值存储类型存在冲突,将使用更精确的存储类型,而不管该存储类型是在主数据集中还是在使用数据集中。如果一个变量在一个数据集中以字符串的形式存储,并且比在另一个数据集中存储的时间长,则以更长的字符串#存储类型为准。如果一个变量作为strL存储在一个数据集和另一个数据集中的str#时,strL存储类型将占优势。
如果变量是一个数据集中的字符串而另一个数据中是数字,则Stata会发出错误消息,除非指定了force选项。 如果指定了force,Stata会在附加数据之前发出警告消息。 如果using data集包含字符串变量,则combined dataset将具有此变量的附加数据的数字缺失值; 字符串变量的内容使用数据集将被忽略。 如果using data 集包含数字变量,则combined dataset将为此变量的附加数据提供空字符串; using data中的数字变量的内容将被忽略。
Example 3
假设我们在内存中包含变量educ的数据集,并且我们之前已经给出了一个标签变量educ“Education Level”命令,与educ相关联的变量标签是“Education Level”。 我们现在附加一个名为newdata.dta的数据集,该数据集还包含一个名为educ的变量,但其变量标签为“Ed”。 。 附加两个数据集后,educ变量仍标记为“Education Level”。See [U] 12.6.2 Variable labels.
Example 4
假设educ变量的值标有名为educlbl的值标签。 进一步假设在newdata.dta中,educ的值也由名为educlbl的值标签标记。因此,在内存中有一个educlbl定义,而newdata.dta中有另一个定义(尽管可能是等效的)。 附加新数据后,您将看到以下内容:
如果内存中的一个标签和磁盘上的另一个标签具有相同的名称,则追加警告您问题并坚持当前在内存中的定义,忽略磁盘文件中的定义。