如果变量存在,如何保留它
How to keep a variable if it exists
假设我有这两个数据集:data1
和 data2
。它们是相同的,只是 data1
包含 make
变量而 data2
不包含。
sysuse auto2, clear
*create first dataset
preserve
tempfile data1
save `data1'
restore
*create second dataset
preserve
drop make
tempfile data2
save `data2'
restore
我的问题很简单。我只想编写代码,以便保留某些变量 如果它们存在 并且如果不存在则保留更有限的集合。请注意,在我的应用程序中,删除变量不太可行。我需要使用 keep。
在我的玩具示例中,我想为拥有它的数据集(即 data1
)保留 price
和 make
,而只为包含它的数据集保留 price
没有make
(即data2
)。
这不起作用,因为如果给定变量不在数据集中,keep
将失败:
forvalues i=1/2 {
use `data`i'', clear
keep price make
}
有什么建议吗?我想知道是否有某种方法可以使用 if
+else
语句来测试变量 make
是否存在,然后执行 keep price make
或 keep price
。或者可能是使用 capture keep price make
的某种方式,然后根据是否失败,转到 keep price
。这些方法或任何其他方法是否有效?
这是一种方法:获取存在的变量列表,并查找这些变量与所需变量集的交集。
您的暂定代码对 save
结果没有任何影响。这里我覆盖了刚刚读入的数据集;您的应用程序可能(确实应该)希望 save
它到一个新文件。
forvalues i=1/2 {
use `data`i'', clear
unab present : *
local wanted price make
local available : list present & wanted
keep `available'
save, replace
}
另见例如isvar
来自 SSC,尤其是 capture confirm var
.
假设我有这两个数据集:data1
和 data2
。它们是相同的,只是 data1
包含 make
变量而 data2
不包含。
sysuse auto2, clear
*create first dataset
preserve
tempfile data1
save `data1'
restore
*create second dataset
preserve
drop make
tempfile data2
save `data2'
restore
我的问题很简单。我只想编写代码,以便保留某些变量 如果它们存在 并且如果不存在则保留更有限的集合。请注意,在我的应用程序中,删除变量不太可行。我需要使用 keep。
在我的玩具示例中,我想为拥有它的数据集(即 data1
)保留 price
和 make
,而只为包含它的数据集保留 price
没有make
(即data2
)。
这不起作用,因为如果给定变量不在数据集中,keep
将失败:
forvalues i=1/2 {
use `data`i'', clear
keep price make
}
有什么建议吗?我想知道是否有某种方法可以使用 if
+else
语句来测试变量 make
是否存在,然后执行 keep price make
或 keep price
。或者可能是使用 capture keep price make
的某种方式,然后根据是否失败,转到 keep price
。这些方法或任何其他方法是否有效?
这是一种方法:获取存在的变量列表,并查找这些变量与所需变量集的交集。
您的暂定代码对 save
结果没有任何影响。这里我覆盖了刚刚读入的数据集;您的应用程序可能(确实应该)希望 save
它到一个新文件。
forvalues i=1/2 {
use `data`i'', clear
unab present : *
local wanted price make
local available : list present & wanted
keep `available'
save, replace
}
另见例如isvar
来自 SSC,尤其是 capture confirm var
.