首页 > 解决方案 > 排序所需的多标签时间序列

问题描述

我有一个来自 IMF 的进出口的时间序列数据集。它有第一列作为主要国家,第二列作为计数器国家,第三列作为类型​​(进口或出口),其余列是值,每列代表一个月。我正在尝试转置它,但 3 个解释变量(国家、计数器和类型)很难。似乎拥有多维列/变量标签会​​很棒,但我没有发现任何让我认为这是可能的东西。当然,我可以合并列(即国家反类型),但这使得当我需要按危机国家排序时变得很困难。任何建议,将不胜感激。这对于 SAS、Python、R 或 Stata 来说非常有用。谢谢你。  

编辑:

感谢您的回复。一个例子是这样的:

国家计数器 国家类型 日期 2001-01 2001-02 2001-03

法国 美国 进口 10 11 12

法国 美国 出口 4 5 6

法国 英国 进口 1 2 3

法国 英国 出口 2 3 4

美国 FR IM 3 4 5

美国 FR EX 5 6 7

美国 英国 IM 4 5 6

美国 英国 EX 5 6 7

英国 FR IM

英国 FR EX

英国 美国 IM

英国美国前

这种情况在 100 多个国家/地区都有很多变量,因此将标签重命名为 US_UK_IM 之类的名称并不理想。我的想法是,我可以按国家、对应国家或类型进行排序,同时也将数据限制在一个国家(例如美国的金融危机,中国的 2015 年市场事件等),并将这些事件混合在一起进行测试. 理想情况下,我可以转置数据集以使其变长并嵌套标签,这样我就可以将数据限制为美国既是国家又是对应国家。  

请让我知道这个解释是否有帮助。谢谢你。

标签: pythonsastime-serieslabeldimension

解决方案


假设您的数据已导入,您可以使用 PROC TRANSPOSE 将其转置为长格式。然后使用 WHERE 语句过滤 Excel 或 SAS 中的数据。

假设您的变量如图所示这将起作用,您可能需要对其进行修改以匹配您的数据。

  1. 对数据进行排序

  2. 转置以使日期成为数据中的行和包含值的新列

  3. 过滤示例

  4. (可选)导出到 Excel。

    proc sort data=have;
    by country counter_country Type;
    run;
    
    proc transpose data=have out=long;
    by country counter_country type;
    var '2001-01'n -- '2020-12'n; *first and last variables;
    run;
    
    data long;
    set long;
    
     month_report = input(compress(_name_, '-'), yymm6.);
    format month_report yymmn6.;
    
    *then to filter US and counter country is either France/US and for the year 2001;
    data US_France_2001;
     set long;
     where country = 'US' and counter_country in ('France', 'US') and year(month_report) =2001;
    run;
    

或导出到 Excel:

proc export data=long outfile='/folders/myfolders/ImportData.xlsx' dbms=xlsx replace;run;

推荐阅读