龙空技术网

Stata/Python 集成(第1部分)

卡贝软件 72

前言:

此时小伙伴们对“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。请注意,我还在变量列表中添加了mpgrep78 。

python

from sfi import Data

dataraw = Data.get('foreign mpg rep78',

range(46,56))

dataraw

end

Python 输出显示列表对象dataraw的内容。该列表包含子列表,每个子列表都包含三个值。每个子列表都是来自 Stata 数据集的观察结果,包含变量foreignmpgrep78的数据。第五次观察中的数字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