【问题标题】:Wide to Long Dataset in SASSAS 中的宽到长数据集
【发布时间】:2018-08-27 08:37:43
【问题描述】:

我有一个数据集,该数据集将多个度量作为多个时间点。

数据如下:

 UserID Var1_2008 Var1_2009 Var1_2010 Var2_2008 Var2_2009 Var2_2010 Race
  1      Y        N         Y         20        30        20        1
  2      N        N         N         15        30        35        0

我希望数据如下所示:

 Year UserID Var1 Var2 Race
 2008 1      Y    20   1
 2009 1      N    30   1
 ....

我该怎么做?我完全迷路了

【问题讨论】:

  • 你有没有研究过PROC TRANSPOSE?请发布您尝试过的任何内容。
  • 就像我说的,我完全迷路了。 Proc transpose 看起来不起作用,因为我有多个变量,我需要新年变量。
  • 是的,但是 SO 并不是真正旨在回答这些类型的问题。问题的要求之一是发布您尝试过的内容,而不仅仅是发布完整的问题并获得答案。您在下面有一个答案,但它不会概括您的数据。

标签: sas data-cleaning


【解决方案1】:

您可以使用数组,假设所有 var1_var2_ 变量的年份相同。

数据要; 设置有; /* 需要两个数组,一个是字符,另一个是数字 */ 数组 v1{*} var1_: ; /* 通配符所有以 'var1_' 为前缀的变量 */ 数组 v2{*} var2_: ; /* 与 var2_ 相同 */ /* 沿着 v1 数组循环 */ 做 i = 1 到暗淡(v1); /* 使用 vname 函数获取与此数组元素关联的变量名称 */ 年份 = 输入(扫描(vname(v1{i}),-1,'_'),8.); var1 = v1{i} ; var2 = v2{i} ; 输出 ; 结尾 ; 放下我; 跑 ;

【讨论】:

    【解决方案2】:

    有一个宏!我认为运行以下命令将完全符合您的要求:

        filename ut url 'https://raw.githubusercontent.com/FriedEgg/Papers/master/An_Easier_and_Faster_Way_to_Untranspose_a_Wide_File/src/untranspose.sas';
        %include ut ;
        %untranspose(data=have, out=want, by=UserID, id=year, delimiter=_,
           var=Var1 Var2, copy=Race)
    

    【讨论】:

    • 上面那个有效,但我也要玩这个!
    猜你喜欢
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-14
    • 2022-08-14
    相关资源
    最近更新 更多