ååã®
èšäºã§ã¯ãSASã©ã€ãã©ãªãŒã®æŠå¿µã«ç²Ÿéããã©ã€ãã©ãªãŒãExcelãã¡ã€ã«ã«å²ãåœãŠãæ¹æ³ãåŠç¿ãã詳现ãªã¬ããŒããäœæããæé ã«ã粟éããŸããã
SAS Webãµã€ããããœãããŠã§ã¢ãããŠã³ããŒãã§ããããšãæãåºãããŠãã ãããSASUEã®ã€ã³ã¹ããŒã«ã«é¢ããããã¥ã¡ã³ããžã®ãªã³ã¯ã¯
èšäº1ã«èšèŒãããŠã
ãŸã ã
ãã®èšäºã§ã¯ãããã¹ããã¡ã€ã«ãèªã¿åãããã€ãã®æ¹æ³ã«ã€ããŠåŠã³ãŸãã

ãã¹ãŠã®äŸã¯ãcïŒ\ workshop \ habrahabrãã£ã¬ã¯ããªã«ä¿åãããã¡ã¢åž³ã§äºåã«äœæããããã¡ã€ã«ã«åºã¥ããŠããŸãã
ããã¹ããã¡ã€ã«ããSASããŒã¿ã»ãããäœæããã«ã¯ãæåã®ãã¡ã€ã«ãåæããŠãããã¹ããã¡ã€ã«ã®èªã¿åãã®çš®é¡ãæ£ããéžæããå¿
èŠããããŸãã ããã¹ããã¡ã€ã«ã«ã¯ãæšæºããŒã¿ãšéæšæºããŒã¿ã®äž¡æ¹ãå«ããããšãã§ããŸãã
æšæºããŒã¿ã¯ãSASãæç€ºãªãã§èªã¿åãããŒã¿ã§ããããšãã°ãããã¹ããã¡ã€ã«ã®Salary倿°ã®å€ã¯12355.44ãšããŠä¿åãããããæ¥ä»ã¯æšæºSASæ¥ä»ãšããŠãã§ã«èšé²ãããŠããŸãïŒ
ã¬ãã¹ã³1ãåç
§ ïŒã ãŸãã$ 12.355.44ã01JAN2018ãªã©ã®å€ãåŠçããå¿
èŠãããå Žåã¯ãèªã¿åãã«ãŒã«ããããã®å€ãSAS圢åŒã«å€æããæç€ºãæå®ããå¿
èŠããããŸãã ãã®èšäºã§ã¯ãINPUTã¹ããŒãã¡ã³ãã䜿çšããŠçããŒã¿ãSASããŒã¿ã»ããã«å€æããæ¹æ³ã«ã€ããŠç°¡åã«èª¬æããŸãã
æšæºã®åºåãããŒã¿ãå«ãããã¹ããã¡ã€ã«ã®èªã¿åãã
ããã¹ããã¡ã€ã«ã®æãåçŽãªäŸãèããŠã¿ãŸãããã managers1.datãã¡ã€ã«ã¯ã³ã³ãåºåãã®ããã¹ããã¡ã€ã«ã§ã次ã®ããã«ãªããŸãã
æ°ããSASããŒã¿ã»ããã«ã¯ãIDãFirst_NameãLast_NameãJob_TitleãCountryãGenderãSalaryã®å€æ°ãå«ãŸããŠããå¿
èŠããããŸãã ãã®ãã¡ã€ã«ã«ä¿åãããŠããããŒã¿ã¯æšæºã§ãããSASã¯åé¡ãªããããèæ
®ããŠããããšã«æ°ä»ããããããŸããã
ããã¹ããã¡ã€ã«ã®èªã¿åãã¯ãDATAã¹ãããã®INFILEããã³INPUTã¹ããŒãã¡ã³ãã䜿çšããŠå®è£
ãããŸãã
INFILEã¹ããŒãã¡ã³ãã®è©³çްã«ã€ããŠã¯ã
SAS 9.4 DATA Step StatementsïŒReferenceãã芧ãã ããã
INFILEã¹ããŒãã¡ã³ãã¯ãèªã¿åãå€éšãã¡ã€ã«ãèšå®ããŸãã
äžè¬çãªã¹ããŒãã¡ã³ãã®æ§æïŒ
INFILE file-specification<device-type><options><operating-environment-options>;
ãã¡ã€ã«ä»æ§ -ããŒã¿ãœãŒã¹ãèå¥ããŸããå€éšãã¡ã€ã«ãŸãã¯å€éšãã¡ã€ã«ãžã®ãªã³ã¯ã§ãã
ããã€ã¹ã¿ã€ã -ã¢ã¯ã»ã¹æ¹æ³ã
ãªãã·ã§ã³ã¯æå¹ãªãªãã·ã§ã³ã§ãã
operating-environment-options-äœæ¥ç°å¢ã®ãã©ã¡ãŒã¿ãŒã
ç¹å®ã®ã±ãŒã¹ã§ã¯ãINFILEã¹ããŒãã¡ã³ãã¯æ¬¡ã®ããã«èšè¿°ãããŸãã
infile "c:\workshop\habrahabr\managers1.dat" dlm=',';
DLM = ïŒãŸãã¯åºåãæå=ïŒã¯ãå€éšãã¡ã€ã«ã®èªã¿åãã«äœ¿çšããã代æ¿åºåãæåïŒã¹ããŒã¹ãããã©ã«ãã®åºåãæåïŒãå®çŸ©ããINFILEã¹ããŒãã¡ã³ãã®ãªãã·ã§ã³ã§ãã åºåãæåã®ãªã¹ãã¯äºéåŒçšç¬Šã§ç€ºãããŸãã
ãã¹ãèšå®ãããã倿°åãèšå®ããå¿
èŠããããŸãã ãã®åé¡ã解決ããã«ã¯ã
INPUTæŒç®åã圹ç«ã¡ãŸãã
INPUTã¹ããŒãã¡ã³ãã®äžè¬çãªæ§æã¯æ¬¡ã®ãšããã§ãã
INPUT <specification(s)> <@ | @@>;
仿§ -倿°ã倿°ãªã¹ããããã¹ãã¿ã€ããã©ã°ïŒ$ïŒããã€ã³ã¿ãŒå¶åŸ¡ãåã®ä»æ§ãèªã¿åã圢åŒãªã©ãå«ãŸããå ŽåããããŸãïŒè©³çްã«ã€ããŠã¯ã
SAS 9.4 DATA Step StatementsïŒReferenceãåç
§ ïŒã
@ -æååä¿ææå®åã
ãã®å Žåã®INPUTã¹ããŒãã¡ã³ãã¯æ¬¡ã®ããã«èšè¿°ãããŸãã
input ID First_Name $ Last_Name $ Job_Title $ Country $ Gender $ Salary;
ããã¹ããã¡ã€ã«ã®èªã¿åããDATAã¹ãããã§çºçããããšãããäžåºŠç¹°ãè¿ããŸãããããã£ãŠãããã¹ããã¡ã€ã«ã®èªã¿åãã«å¿
èŠãªã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
data managers; infile "c:\workshop\habrahabr\managers1.dat" dlm=','; input ID First_Name $ Last_Name $ Job_Title $ Country $ Gender $ Salary; run;
managerãšåŒã°ããäžæçãªSASããŒã¿ã»ãããäœæããŸããããã¯ãSASã»ãã·ã§ã³ãçµäºãããŸã§WORKã©ã€ãã©ãªã«ä¿åãããŸãïŒ
ã¬ãã¹ã³2ãåç
§ ïŒ
ã³ãŒããæ£ããæ©èœããŠããã確èªããŠãã ããã ããã°ã©ã ãå®è¡ãããã°ã確èªããŸãã

ããŒã¿ã»ãããå°å·ããŸãã
proc print data=managers; run;
PROC PRINTã¹ãããã®çµæïŒ
äžéšã®åã®ããã¹ãå€ã¯ãããªãã³ã°ããããŠããããšã«æ³šæããŠãã ããã PROC CONTENTSããã·ãŒãžã£ãå®è¡ããŠãäœæããã倿°ã®é·ããæ±ºå®ããŸãã
proc contents data=managers varnum; run;
VARNUMãªãã·ã§ã³ã¯ãããŒãã«ã«æ ŒçŽãããŠããé åºã§å€æ°ã衚瀺ããŸãã
ããã·ãŒãžã£ã®åºåã®æçïŒ
å¯å€é·
ããã©ã«ãã§ã¯ãSAS Baseã¯é·ãã8ãã€ãã®ä»»æã®ã¿ã€ãã®å€æ°ãäœæããŸãã ãã¯ãªããã³ã°ãå€ãåé¿ããã«ã¯ãé·ããæç€ºçã«èšå®ããå¿
èŠããããŸãã ãã®åé¡ã¯ã
LENGTHæŒç®åã䜿çšããŠç°¡åã«è§£æ±ºã§ããŸãã
ãã®æŒç®åã¯INPUTæŒç®åã®åã«èšè¿°ããå¿
èŠãããããšãç¥ã£ãŠããããšãéèŠã§ããããã¯SAS Baseã®æ©èœã«ãããã®ã§ãã
ãããã£ãŠãLENGTHæŒç®åã䜿çšããããã°ã©ã ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
data managers; infile "c:\workshop\habrahabr\managers1.dat" dlm=','; length First_Name $ 10 Last_Name $ 12 Job_Title $25 Country $2 Gender $1; input ID First_Name Last_Name Job_Title Country Gender Salary; run; proc print data=managers; run; proc contents data=managers varnum; run;
LENGTHæŒç®åã§æå®ãã倿°ã®ã¿ã€ãã«å±ããŠãããããINPUTã§ã¯å€æ°ã®ååãåçŽã«ãªã¹ãããŸããã INPUTã¹ããŒãã¡ã³ãã§ã¯ã倿°ã¯ãœãŒã¹ã«ããé ã«ãªã¹ããããŠããããšã«æ³šæããŠãã ããïŒ
ããã°ã©ã ãå®è¡ããçµæã調ã¹ãŸãã
PROC PRINTã¹ãããã®çµæïŒ
PROC CONTENTSãå®è¡ããçµæïŒ
倿°ã¯ç°ãªãé åºã§è¡šç€ºãããŸãã ããã¯ãSAS Baseããã¹ãŠãé çªã«èªã¿åãããã§ããæåã«LENGTHæŒç®åãã倿°ãå
¥åãããæ¬¡ã«INPUTããã§ãã¯ãããããŒã¿ã»ããã«ID倿°ãšSalary倿°ã远å ãããŸãã
åãå
ã®é åºã§è¡šç€ºããããã«ãLENGTHã¹ããŒãã¡ã³ãã§ID倿°ãšSalary倿°ã®é·ããæç€ºçã«èšå®ã§ããŸãã æ°å€å€æ°ã®æå°ã®é·ãã¯3ãã€ãã§ãããæ°å€å€æ°ã®é·ããå°ããå€ã«å€æŽãããšãæ°å€ã®ç²ŸåºŠã倱ãããå¯èœæ§ãããããšãå¿ããªãã§ãã ããã
ãããã£ãŠãããã°ã©ã ã¯æ¬¡ã®åœ¢åŒãåããŸãã
data managers; infile "c:\workshop\habrahabr\managers1.dat" dlm=','; length ID 8 First_Name $ 10 Last_Name $ 12 Job_Title $25 Country $2 Gender $1 Salary 8; input ID First_Name Last_Name Job_Title Country Gender Salary; run; proc print data=managers; run;
æ°žç¶çãªå±æ§ã
DATAã¹ãããã§ã倿°ã«å®æ°å±æ§ãèšå®ããŸãïŒãã©ãŒããããšã©ãã«ã ãã®å Žåã屿§ã¯åºåããŒã¿ã»ããã®èšè¿°åã«æžã蟌ãŸããåPROCã¹ãããã§äœ¿çšãããŸãã
data managers; infile "c:\workshop\habrahabr\managers1.dat" dlm=','; length ID 8 First_Name $ 10 Last_Name $ 12 Job_Title $25 Country $2 Gender $1 Salary 8; input ID First_Name Last_Name Job_Title Country Gender Salary; label ID = 'Employee ID' First_Name = 'First Name' Last_Name = 'Last Name' Job_Title = 'Job Title'; format Salary dollar11.2; run; proc contents data=managers varnum; run;
åºåããŒã¿ã»ããã®å±æ§ã¯èšè¿°åã«æžã蟌ãŸããŸãã
çµæã®SASããŒã¿ã»ããããã¬ããŒããäœæããŸãã PROC PRINTãªãã·ã§ã³ã§ã¯ããã®æé ã§ã¬ããŒãã§æå®ãããã©ãã«ã䜿çšãããããã«ãlabelãã©ã¡ãŒã¿ãŒãæå®ããŠããããšã«æ³šæããŠãã ããã
proc print data=managers label noobs; run;
åºåãèšå·ä»ãã®éæšæºããŒã¿ãå«ãããã¹ããã¡ã€ã«ã®èªã¿åãã
ãã£ã¬ã¯ããªcïŒ\ workshop \ habrahabrã«ããããã¹ããã¡ã€ã«managers2.datãæ€èšããŸãã
åã®ãã®ãšæ¯èŒããŠãéæšæºã®SASããŒã¿ãå«ãåããããŸãã
æ°ããããŒã¿ã»ããã«ã¯ãIDãFirst_NameãLast_NameãJob_TitleãCountryãGenderãSalaryãHire_Dateã®å€æ°ãå«ãŸããŠããå¿
èŠããããŸãã
Salary倿°ã«ã¯ç¹æ®æåãå«ãŸããŸãããŸããSAS圢åŒã®æ¥ä»ã¯1960幎1æ1æ¥ããå§ãŸãæ¥æ°ãè¡šãæ°å€ã§ããïŒ
ã¬ãã¹ã³1ãåç
§ ïŒãHireDateã¯ä»ã®å€ãæ ŒçŽããŸãã éæšæºããŒã¿ãèªã¿åãã«ã¯ãå
¥å圢åŒInformatã䜿çšããå¿
èŠããããŸãã å
¥å圢åŒãé©çšããã«ã¯ãåã®ããŒã¿ãåãã¿ã€ãã§ãªããã°ãªããªãããšã«æ³šæããããšãéèŠã§ãã
å
¥å圢åŒã«é¢ãããã¹ãŠã®æ
å ±ã¯ã
SAS 9.4 Formats and InformatsïŒReferenceã«ãããŸãã
Infromatã¯ãéæšæºã®SASå
¥åããŒã¿ã®èªã¿åãã«äœ¿çšãããã«ãŒã«ã§ãã èªã¿åã圢åŒã®ã¿ã€ãã¯ãSASããŒã¿ã¿ã€ãã«å¯Ÿå¿ããŠããŸãã ããšãã°ã100,000ãã«ã®å€ããœãŒã¹ã«ä¿åãããŸãã ãã®å€ãæ°å€ã«å€æããåã«ãã«èšå·ãšã³ã³ããåé€ããã«ã¯ãINFORMATã«ã³ã8ãé©çšããå¿
èŠããããŸãã ãŸãã¯ãã«8ã ãã®å Žåãå€100000ããµããªãŒããŒãã«ã«ä¿åãããŸãã
èªã¿åãã®äžè¬çãªåœ¢åŒã®æ§æã¯æ¬¡ã®ãšããã§ãã
<$>informat<w>.<d>
$ã¯ãããã¹ãã¿ã€ããã€ã³ã¿ãŒã§ãã
Informatã¯ãèªã¿åãçšã®åœ¢åŒã®ååã§ãã
w-ãã¹ãŠã®æåãå«ããã£ãŒã«ãå¹
ã
dã¯å°æ°ç¹ä»¥äžã®æ¡æ°ã§ãã
ããã¹ããã¡ã€ã«managers2.datãèªã¿ãŸã
data managers2; infile "c:\workshop\habrahabr\managers2.dat" dlm=';'; input ID :8. First_Name :$10. Last_Name :$12. Job_Title :$25. Country :$2. Gender :$1. Salary :dollar10. Hire_Date :date9.; label ID = 'Employee ID' First_Name = 'First Name' Last_Name = 'Last Name' Job_Title = 'Job Title'; format Salary dollar10. Hire_Date date9.; run; proc print data=managers2 noobs; ID ID; run;
æé ã®çµæïŒ
æ¬ æå€ãåŠçããŸãã
ããŒã¿ã«æ¬ æå€ãããå ŽåãDSDãšMISSOVERã®2ã€ã®ãªãã·ã§ã³ã䜿çšã§ããŸãã
DSDã¯ãæååå
ã®æ¬ æå€ãæ€çŽ¢ããæåŸã«MISSOVERãæ€çŽ¢ããŸãã
ãããã£ãŠãmanagers2aãã¡ã€ã«ãèªã¿åãããå Žåã2ã€ã®é£ç¶ããåºåãæåãæ¬ æå€ããšã³ã³ãŒãããŸãïŒ
ãããã®ãªãã·ã§ã³ã䜿çšãããšããã®ããã¹ããã¡ã€ã«ãç°¡åã«èªã¿åãããšãã§ããŸãã
data managers2a; infile "c:\workshop\habrahabr\managers2a.dat" dlm=';' dsd missover; input ID :8. First_Name :$10. Last_Name :$12. Job_Title :$25. Country :$2. Gender :$1. Salary :dollar10. Hire_Date :date9.; label ID = 'Employee ID' First_Name = 'First Name' Last_Name = 'Last Name' Job_Title = 'Job Title'; format Salary dollar10. Hire_Date date9.; run; proc print data=managers2a; ID ID; run;
ããã°ã©ã ã®çµæïŒ
ããŒã¿ã®èªã¿åããšã©ãŒã
åã«ããŸããŸãªã¿ã€ããŸãã¯åœ¢åŒã®ããŒã¿ãå«ãŸããŠããå Žåã¯ã次ã®äŸãæ€èšããŠãã ãã
cïŒ\ workshop \ habrahabrãã£ã¬ã¯ããªã«ã¯bad_data.datãã¡ã€ã«ãå«ãŸããŠããŸã
ãã®ãã¡ã€ã«ãèæ
®ããDATA StepãäœæããŸãã
data new; infile "c:\workshop\habrahabr\bad_data.dat" dlm=','; input ID :8. First_Name :$10. Last_Name :$12. Job_Title :$25. Country :$2. Gender :$1. Salary :5. Hire_Date :date9.; label ID = 'Employee ID' First_Name = 'First Name' Last_Name = 'Last Name' Job_Title = 'Job Title'; format Salary dollar10. Hire_Date date9.; run; proc print data=new; ID ID; run;
ã³ãŒããå®è¡ãããã°ãåç
§ããŠãã ããïŒ
ãã°ã§ã¯ãããŒã¿èªã¿åããšã©ãŒã®è¡šç€ºïŒ
2ã€ã®
èªå倿°ãäœæãããŸãïŒ_N_ããã³_ERROR_ã
_N_ã¯ã¹ãããã®å埩ã§ãã
_ERROR_-å€1ã¯ãšã©ãŒã瀺ããŸãã
ããã°ã©ã ã®çµæïŒ
Country倿°ã®å€ã44ãã¯ããŒã¿èªã¿åããšã©ãŒãªãã§èæ
®ãããLogã®Salary倿°ãšHire_Date倿°ã§ã¯ãããŒã¿èªã¿åããšã©ãŒã®å
åãçŸããããšã«æ³šæããŠãã ããã
ããã¹ããã¡ã€ã«ã®èªã¿åãæã«å€æ°ã®éå§æåã®äœçœ®ã€ã³ãžã±ãŒã¿ãŒã䜿çšãã
ãã£ã¬ã¯ããªcïŒ\ workshop \ habrahabrããåæ§ã®ããã¹ããã¡ã€ã«info.datãèªã¿åãå¿
èŠãããå ŽåïŒ
å€éšãã¡ã€ã«ãèªã¿åãå¥ã®ãªãã·ã§ã³ã¯ã倿°ã®æåã®æåã®äœçœ®ã€ã³ãžã±ãŒã¿ã䜿çšããããšã§ãã
äœçœ®ã倿°åãå
¥å圢åŒïŒå
¥å圢åŒïŒã瀺ãããŸãã
ãã®ã±ãŒã¹ã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
data info; infile "c:\workshop\habrahabr\info.dat"; input @1 ID 3. @4 Date mmddyy10. @15 Job_Title $11. @26 Bonus percent3.; format Date date9. Bonus percent.; run; proc print data=info; run;
ã³ãŒããå®è¡ããŠçµæã確èªããŸãã
æ°è¡ã®èгå¯ã§ããã¹ããã¡ã€ã«ãèªã¿åããŸãã
1ã€ã®èŠ³æž¬ãæ°è¡ãããããã¹ããã¡ã€ã«ãèªã¿åãå¿
èŠãããå ŽåïŒ
ãã®åé¡ã解決ããã«ã¯ããã€ãã®æ¹æ³ããããŸãã
- è€æ°ã®INPUTã¹ããŒãã¡ã³ãã䜿çšããŸãã
data managers6; infile "c:\workshop\habrahabr\managers6.dat"; input ID :8. First_Name :$6. Last_Name :$10.; input Job_Title :$11. Country :$2. Gender :$1. Salary :8.; run;
- ãã€ã³ã¿ãŒã䜿çšããŸãã
SASã¯ãã¹ã©ãã·ã¥æåïŒ/ïŒãINPUTã¹ããŒãã¡ã³ãã§æ€åºããããšã次ã®ã¬ã³ãŒãïŒè¡ïŒãããŒãããŸãã
data managers6; infile "c:\workshop\habrahabr\managers6.dat"; input ID :8. First_Name :$6. Last_Name :$10./ Job_Title :$11. Country :$2. Gender :$1. Salary :8.; run;
ã©ã¡ãã®å Žåããmanagers6ããŒã¿ã»ãããäœæãããŸããããã¯ãäžæçãªWORKã©ã€ãã©ãªã«ãããŸãïŒ
ã¬ãã¹ã³2ãåç
§ ïŒã
çµæã®ããŒã¿ã»ãããå°å·ããŸãã
proc print data=managers6 noobs; id id; run;
æé ã®çµæïŒ
å€éšãã¡ã€ã«ãã€ã³ããŒããã
PROC IMPORTããã·ãŒãžã£ã䜿çšããŠãå€éšãã¡ã€ã«ãèªã¿åãããšãã§ããŸãã
ããã¹ããã¡ã€ã«ãããŒãžã£ãŒãã€ã³ããŒããã5ã
ãã®å Žåã®PROCã€ã³ããŒãæé ã¯æ¬¡ã®ãšããã§ãã
proc import datafile="C:\workshop\habrahabr\managers5.dat" dbms=dlm out=managers replace; delimiter=','; getnames=yes; run; proc print data=managers; run;
ã³ãŒããå®è¡ãããã°ãåç
§ããŠãã ããïŒ
ããã°ã©ã ã®çµæïŒ
ãããã£ãŠãããã¯ããã¹ããã¡ã€ã«ã®èªã¿åãã«ã€ããŠç°¡åã«èª¬æããŠããŸãã èæ
®ãããæŒç®åãšæé ã®æ©èœã¯ã¯ããã«åºç¯å²ã§ããã詳现ãªèª¬æãããã¥ã¡ã³ãã«èšèŒãããŠããããšã«æ³šæããŠãã ããã
次ã®èšäºã§ã¯ãSASããŒã¿ã»ããã®äœæã«ã€ããŠèŠãŠãããŸãã ãããŠããã¡ãããäŒçµ±çã«-SASã§æé·ããŸãããïŒ