sas - समझ - स्टेप्स ऑफ़ मेल मर्ज




एकाधिक सीएसवी फाइलों को एसएएस का उपयोग कर एकल डाटासेट में कैसे मर्ज करना (2)

मेरे पास ~ 2300 सीएसवी फ़ाइलें हैं और कॉलिन 1 चर नाम प्रत्येक सीएसवी फ़ाइल के लिए अलग है। मैं सभी फाइलों को पैनलिस्टआईडी (कॉलम 2) द्वारा मर्ज करना चाहता हूं और प्रत्येक सीएसवी फ़ाइल की आवृत्ति प्राप्त करने के लिए कॉलम 1 पर आवृत्तियों को चलाता हूं। कृपया कोई मदद कर सकता है?

फ़ाइल लेआउट के नीचे दिए गए उदाहरण:

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

सभी फ़ाइलों में पढ़ने के लिए बस infile स्टेटमेंट पर वाइल्डकार्ड का उपयोग करें, और filename= विकल्प को एक अस्थायी चर _f में वर्तमान फ़ाइल को स्टोर करने के लिए, इसे f में संग्रहीत करने के लिए।

फिर तदनुसार f और var हेरफेर करें।

data big ;
  length _f f $256. ;
  infile "*.csv" truncover filename=_f dlm=',' ;
  f = _f ;
  input var
        panellistID
        ;
run ;

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;

यह आपको विस्तृतडेटा नाम की एक डाटासेट देगा जैसे:

obs   panelistID mat1_pen1 mat2_pen2 mat3_pen3 etc

1      10075001     0        22            33