【问题标题】:Transforming lined data to grouped将行数据转换为分组
【发布时间】:2019-12-06 19:47:12
【问题描述】:

我有一个关于转换数据的问题

如果我的数据如下:

Variable A  
130  
130  
130 

Variable B  
56  
57  
58  

Variable C  
1100    
1200  
1300

在一个文本文件中,我想将其转换为:

Variable A     Variable B    Variable C  
130            56            1100  
130  57   1200  
130  58  1300

我该怎么办?

【问题讨论】:

  • 这取决于..它们是为每个变量分隔文本文件,还是一个由空行分隔的文件?查看 pandas 和 read_table 函数以从文本文件中加载数据
  • 这在很大程度上取决于这些文件是多个文件还是单个文件。 \

标签: python python-3.x database sas


【解决方案1】:

您的数据以列为中心,而 SAS 数据集以行为中心,因此在某些时候需要数据透视。

最通用的流程是:

  • 将数据输入到多行名称:值对中
    • 为每对计算一个序列值(行号)
  • 对输入进行排序
  • 逐行转置。

假设所有数据都是数字,这里是一个例子:

* construct a demonstration input data file;
* every data value in this construction is via +1 to allow
* examination of the reshaping;

filename havedata temp;

data _null_;
  file havedata;

  call streaminit(123);

  do varname = 'A', 'B', 'C', 'D', 'X', 'Y', 'Z';
    put 'Variable ' varname;
    do _n_ = 1 to 100 + rand('uniform',20);
      value + 1; 
      put value;        
    end;
  end;
run;

* read the demo file;

data want_input;
  infile havedata;

  length rownumber 8 name $32 value 8;
  retain name;

  input @;

  if _infile_ =: 'Variable' then do;                /* detect variable landmark in data file */
    rownumber = 0;
    name = substr(_infile_, length('Variable')+1);  
    delete;
  end;

  rownumber + 1;
  input @1 value;
run;

proc sort data=want_input;
  by rownumber name;
run;

proc transpose data=want_input out=want(drop=_name_ rownumber);
  by rownumber;
  id name;
  var value;
run;

如果数据文件变量“blocks”是字符或日期表示,事情会更复杂。

【讨论】:

    猜你喜欢
    • 2020-06-04
    • 2021-11-18
    • 1970-01-01
    • 2021-08-26
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2018-09-12
    • 2018-02-08
    相关资源
    最近更新 更多