【问题标题】:How to merge multiple csv files into single dataset using SAS如何使用 SAS 将多个 csv 文件合并到单个数据集中
【发布时间】:2013-07-20 01:15:37
【问题描述】:

我有 ~2300 个 CSV 文件,每个 CSV 文件的第 1 列变量名称不同。我想按 panelistID(第 2 列)合并所有文件并在第 1 列上运行频率以获取每个 CSV 文件的频率。请问有人可以帮忙吗?

以下文件布局示例:

File1

mat1_pen1, panelistID

0,  10075001

20, 10086001

44, 10086002

10, 10096001

File2

mat2_pen2, panelistID

74, 10118002

40, 10118003

77, 10128001

77, 10128003


file 3

mat3_pen4, panelistID

77, 10128003

51, 10137001

0,  10148001

0,  10148002

0,  10157001

【问题讨论】:

  • 您可以发布您已经尝试过的任何代码或解释您已经尝试过的内容吗?这将有助于其他人回答您的问题。
  • 我可以投票支持“让认为解雇你 2300 个 CSV 文件是个好主意的人”吗?

标签: sas


【解决方案1】:

只需在infile 语句上使用通配符即可读取所有文件,并使用filename= 选项将当前文件存储在临时变量_f 中,将其存储到f。

然后相应地操作f 和var。

数据大; 长度_f f $256。 ; infile "*.csv" trunco​​ver 文件名=_f dlm=',' ; f = _f ; 输入变量 小组成员 ID ; 跑 ;

【讨论】:

  • 问题是,我读问题的方式,他想保持列标题中列出的原始变量名;此解决方案将它们全部放在同一列中。并将字符和数字数据与列标题混合。这两个问题都可以通过一些转置、转换等来解决。
【解决方案2】:
filename mycsv "*.csv";

data mydataset(drop=tmp);
   infile mycsv dsd dlm=',' eov=eov;
   retain mat_pen_id;

   if _n_ = 1  or eov then do;        *when using wildcard-concatenated input files, ;
      input mat_pen_id $20. tmp $20.;    *eov is true for first line of second file.; 
      eov = 0;
    else do;                          * _n_ =1 is true for first line of first file only;
        input mat_pen panelistID;
   end;
run;

proc sort data= mydataset;
   by panelistID;
run;

proc transpose
  data=mydataset out=wide_data;
      by panelistID;
      id mat_pen_id;
      var mat_pen;
      run;

proc print data=wide_data;
run;

这将为您提供一个名为 wide_data 的数据集,例如:

obs   panelistID mat1_pen1 mat2_pen2 mat3_pen3 etc

1      10075001     0        22            33

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2020-01-27
    • 2016-04-18
    • 1970-01-01
    • 2020-02-22
    • 2020-03-16
    相关资源
    最近更新 更多