military - Cómo combinar varios archivos csv en un único conjunto de datos con SAS
sas software (2)
Simplemente use un comodín en la instrucción de infile
para leer en todos los archivos, y la opción filename=
para almacenar el archivo actual en una variable temporal _f
, almacenándolo en f
.
Luego manipule f
y var
consecuencia.
data big ; length _f f $256. ; infile "*.csv" truncover filename=_f dlm='','' ; f = _f ; input var panellistID ; run ;
Tengo ~ 2300 archivos CSV y el nombre de la columna colunm 1 es diferente para cada archivo CSV. Quiero fusionar todos los archivos por panelistID (colunm 2) y ejecutar frecuencias en la columna 1 para obtener la frecuencia de cada archivo CSV. Por favor alguien puede ayudar?
A continuación, ejemplo de diseño de archivos:
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
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;
Esto le dará un conjunto de datos llamado wide_data como:
obs panelistID mat1_pen1 mat2_pen2 mat3_pen3 etc
1 10075001 0 22 33