前言:
此时小伙伴们对“label标签用法stata”大致比较重视,朋友们都想要学习一些“label标签用法stata”的相关资讯。那么小编也在网上收集了一些有关“label标签用法stata””的相关知识,希望同学们能喜欢,各位老铁们快快来了解一下吧!Stata/Python 集成第 8 部分:使用 Stata 函数接口将数据从 Stata 复制到 Python
2020 年 11 月 5 日Chuck Huber,统计外联主任
在我之前的帖子中,我使用了read_stata()方法将 Stata 数据集读入pandas 数据帧。当您想将整个 Stata 数据集读入 Python 时,这很有效。但有时我们希望从 Stata 数据集中读取变量或观察的子集,或两者兼而有之。在这篇文章中,我将向您介绍Stata 函数接口(SFI) 模块,并向您展示如何使用它来将部分数据集读入 pandas 数据帧。
如果您不熟悉 Python,在进一步阅读之前阅读我的 Stata/Python 集成系列中的前四篇文章可能会有所帮助。
1. 设置 Stata 以使用 Python
2. 在 Stata 中使用 Python 的三种方式
3. 如何安装 Python 包
4. 如何使用 Python 包
使用 SFI 模块将数据从 Stata 移动到 Python
SFI是一个 Python 模块,允许您在 Stata 和 Python 之间来回传递信息。您可以复制整个或部分数据集、数据框、局部和全局宏、标量和矩阵,甚至全局 Mata 矩阵。在一篇博文中向您展示的功能太多了。因此,今天我将向您展示一个您可能会使用的功能:将部分 Stata 数据集读入 Python。我们将在以后的文章中探索更多 SFI 功能。
让我们使用自动数据集开始下面的代码块。接下来,让我们进入 Python 环境,从SFI模块中导入Data类。然后,我们将使用Data类中的get()方法将变量foreign复制到名为dataraw的 Python 列表对象中。get()方法的第一个参数是放在单引号中的 Stata 变量列表。
sysuse auto
python
from sfi import Data
dataraw = Data.get('foreign')
dataraw
end
Python 输出显示列表对象dataraw包含 Stata 变量foreign的数据。
. python
----------------------------------------------- python (type end to exit) ------
>>> from sfi import Data
>>> dataraw = Data.get('foreign')
>>> dataraw
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
> , 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1
> , 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
>>> end
--------------------------------------------------------------------------------
指定观测值范围
get()方法的第二个参数允许我们指定观测值范围。我在下面的代码块中使用了range()函数来指定观测值 46 到 56。请注意,我还在变量列表中添加了mpg和rep78 。
python
from sfi import Data
dataraw = Data.get('foreign mpg rep78',
range(46,56))
dataraw
end
Python 输出显示列表对象dataraw的内容。该列表包含子列表,每个子列表都包含三个值。每个子列表都是来自 Stata 数据集的观察结果,包含变量foreign、mpg和rep78的数据。第五次观察中的数字8.98846567431158e+307是缺失值,下面我们将学习如何处理。
. python
----------------------------------------------- python (type end to exit) ------
>>> from sfi import Data
>>> dataraw = Data.get('foreign mpg rep78',
... range(46,56))
>>> dataraw
[[0, 18, 4], [0, 18, 1], [0, 19, 3], [0, 19, 3], [0, 19, 8.98846567431158e+307],
> [0, 24, 2], [1, 17, 5], [1, 23, 3], [1, 25, 4], [1, 23, 4]]
>>> end
--------------------------------------------------------------------------------
使用指示变量指定观察值
get()方法的第三个参数允许我们根据指示变量进一步限制我们的数据。在下面的示例中,我生成了一个名为touse的新变量,如果mpg小于 20,则该变量等于 1 ,否则为 0。然后,我将“touse”指定为get()中的第三个参数。
generate touse = mpg<20
python
from sfi import Data
dataraw = Data.get('foreign mpg rep78',
range(46,56),
"touse")
dataraw
end
Python 输出显示dataraw仅包含mpg小于 20 的观察值。
. python
----------------------------------------------- python (type end to exit) ------
>>> from sfi import Data
>>> dataraw = Data.get('foreign mpg rep78',
... range(46,56),
... "touse")
>>> dataraw
[[0, 18, 4], [0, 18, 1], [0, 19, 3], [0, 19, 3], [0, 19, 8.98846567431158e+307],
> [1, 17, 5]]
>>> end
-------------------------------------------------- ------------------------------
获取值标签而不是数字
Stata 变量foreign的值用“Domestic”标记为 0,用“Foreign”标记为 1。
. list foreign in 50/54
+----------+
| foreign |
|----------|
50. | Domestic |
51. | Domestic |
52. | Domestic |
53. | Foreign |
54. | Foreign |
+----------+
我们的 Python 列表对象dataraw仅存储基础数值 0 和 1,但我们可能更喜欢使用标签。get()的第四个参数允许我们将 Stata 变量的值标签而不是数字传递给 Python。我在下面的代码块中指定了 valuelabel=True以将值标签传递给 Python。
python
from sfi import Data
dataraw = Data.get('foreign mpg rep78',
range(46,56),
"touse",
valuelabel=True)
dataraw
end
下面的 Python 输出向我们展示了dataraw现在包含“Domestic”和“Foreign”这两个词。请注意,这些是字符串而不是标记的数值。
. python
----------------------------------------------- python (type end to exit) ------
>>> from sfi import Data
>>> dataraw = Data.get('foreign mpg rep78',
... range(46,56),
... "touse",
... valuelabel=True,)
>>> dataraw
[['Domestic', 18, 4], ['Domestic', 18, 1], ['Domestic', 19, 3], ['Domestic', 19,
> 3], ['Domestic', 19, 8.98846567431158e+307], ['Foreign', 17, 5]]
>>> end
--------------------------------------------------------------------------------
标签: #label标签用法stata