1

我有 ~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
4

2 回答 2

4

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

然后f进行var相应的操作。

数据大;
  长度_f f $256。;
  infile "*.csv" trunco​​ver 文件名=_f dlm=',' ;
  f = _f ;
  输入变量
        小组成员 ID
        ;
跑 ;
于 2013-07-19T11:03:19.817 回答
1
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
于 2013-07-19T16:13:47.833 回答