| SAS TIP |
|
| work |
|
óÀ½¸Þ´º·Î
|
´Ù¿î·Îµå : PULIST ÆÄÀÏ
| SAS CODE |
| SAS Statements |
|---|
|
****************************************************************; 1. ¾Æ·¡ÀÇ ±ÛÀÌ ¿¹ÀüÀÇ ¹öÁ¯À̶ó¼ Á¦°¡ ¼öÁ¤À» ÇÏ¿©¼ ¿Ï¼ºÇÏ¿´½À´Ï´Ù. Âü°íÇϱ⸦ ¹Ù¶ø´Ï´Ù. - http://listserv.uga.edu/cgi-bin/wa?A2=ind9804D&L=sas-l&P=R12035&D=0; 2. cleanwork - UNIX¿¡¼ SAS ÇÁ·Î¼¼½º°¡ Á¾·áµÚ¿¡ ³²Àº WORK µð·ºÅ丮ÀÇ ÆÄÀÏÀ» Áö¿ì±â À§ÇÑ ¿É¼Ç(SASµµ¿ò¸» ÂüÁ¶) WORK µð·ºÅ丮 û¼Ò¸¦ ÇÏ´Â µµ±¸. 3. PULIST : ÇöÀç ¿î¿µÁßÀÎ PROCESS ID¸¦ È®ÀÎÇÏ´Â MS¿¡¼ Á¦°øÇÏ´Â ÇÁ·Î±×·¥ À¯»çÇÑ ÇÁ·Î±×·¥ : PsTools 4. LOGEVENT : ÆÄÀÏ »èÁ¦½Ã ¿À·ù¹ß»ý½Ã NT·Î±×¿¡ ·Î±× »ý¼º ¼³Á¤-Á¦¾îÆÇ-°ü¸®µµ±¸-À̺¥Æ®ºä¾î-ÀÀ¿ëÇÁ·Î±×·¥·Î±× Âü°í»çÀÌÆ® : http://support.microsoft.com/kb/315410 http://www.petri.co.il/download_free_reskit_tools.htm 5. »ç¿ë¹æ¹ý : NT ½ºÄÉÁì¿¡¼ Batch ¸ðµå·Î ÇÁ·Î±×·¥ ½ÇÇà 6. ÁÖÀÇÁ¡ : ÇÁ·Î±×·¥ÀÇ ´Ù¾çÇÑ Å×½ºÆ®¸¦ ÇϽÅÈÄ¿¡, ÁÖÀÇÇÏ½Ã°í »ç¿ëÇϽñ⸦ ¹Ù¶ø´Ï´Ù. ÇÊ¿äÇÑ WORKÆÄÀÏÀ» Áö¿ï¼öµµ ÀÖ½À´Ï´Ù. 7. Âü°í FILENAME : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0162.htm DOPEN : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0139.htm DNUM : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0138.htmDCLOSE : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0124.htmDREAD : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0142.htmFDELETE : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0156.htmMODULEN : http://www.statwith.pe.kr/SAS/1.FUNCTION/F0275.htm ****************************************************************; * ±âº» ¼³Á¤; * NT Resource KitÀÇ À§Ä¡ ÁöÁ¤; %let ntrk ='"C:\Program Files\Resource Kit\pulist.exe"'; %let LOGEVENT ='"C:\Program Files\Resource Kit\logevent.exe"'; * ±âº»¼³Á¤ Á¾·á; ****************************************************************; options noxwait xsync obs=max; * Win32 API È£Ãâ Å×À̺íÀ» À§ÇØ Work catalogue¿¡ Temporary Entry »ý¼º.; filename sascbtbl catalog 'work.temp.winapi.source'; data _null_; file sascbtbl; put "routine RemoveDirectoryA"; put "module=KERNEL32"; put "minarg=1"; put "maxarg=1"; put "stackpop=called"; put "returns=short;"; put "arg 1 input char format=$cstr200.;"; run; ¡¡ * Work¶óÀ̺귯¸®µéÀÌ ÀúÀåµÇ´Â µð·ºÅ丮 À§Ä¡¸¦ ã´Â´Ù.; %let wdir=; data _null_; * Config¸¦ °Ë»öÇÏ¿©¼ À§Ä¡¸¦ ã´Â ¹æ¹ýµµ ÀÖÁö¸¸, °£´ÜÇÏ°Ô ¾Æ·¡¿Í °°ÀÌ Ã³¸®; workdir = substr(pathname("work"),1,index(pathname("work"),'\_TD')-1); call symput('wdir',trim(left(workdir))); run ;¡¡ * SAS TEMPÆÄÀÏ À§Ä¡¸¦ ¹ÝȯÇÑ´Ù.(LOGâ¿¡¼ È®ÀÎ); *±âº» WORKÀ§Ä¡ : C:\Documents and Settings\Administrator\Local Settings\Temp\SAS Temporary Files; %put wdir=&wdir; * WORK ¼ºêµð·ºÅ丮ÀÇ À̸§À» µ¥ÀÌÅͼ¼Æ®·Î »ý¼º. * WORK subdirectory ÇüÅ : _TDxxxx * (_TD + SAS ¼¼¼ÇÀÇ ÇÁ·Î¼¼½º ID(Process ID,PID) ¹øÈ£ 4ÀÚ¸®); data sasdirs(index=(workdir)); attrib dirname length=$50 workdir length=$8 pid length=$5; * À§¿¡¼ ÀúÀåµÈ µð·ºÅ丮 À§Ä¡¸¦ FILENAME "mydir"¿¡ ÇÒ´ç; rc=filename('mydir',"&wdir"); * ÇÒ´çµÈ µð·ºÅ丮¸¦ Á¢±ÙÇã°¡; did=dopen('mydir'); * DIRNAMEº¯¼ö ÃʱâÈ; dirname=' '; * WORKµð·ºÅ丮 ³»ÀÇ µð·ºÅ丮ÀÇ ¼öÀÚ¸¦ ÇÒ´ç; memcount=dnum(did); if (memcount>0) then do; do t = 1 to memcount; * WORK µð·ºÅ丮 ³»¿¡ Á¸ÀçÇÏ´Â µð·ºÅ丮¸íÀ» ÇÒ´ç; * ÇöÀç ÇÁ·Î¼¼½º¿¡ Á¸ÀçÇÏ´Â µð·ºÅ丮¸í°ú ¼¼¼ÇÀÌ Á×Àº µð·ºÅ丮¸í ÇÒ´ç; dirname=trim(left(upcase(dread(did,t)))); * WORK µð·ºÅ丮 ³»ÀÇ _TDxxxx¸¸À» ´ë»óÀ¸·Î ½ÇÇà; if dirname =: "_TD" then do; workdir = trim(dirname); pid = substr(dirname,4); output; end; end; end; rc=dclose(did); run; ¡¡ * PULISTÀ¯Æ¿¸®Æ¼¸¦ ÀÌ¿ëÇÏ¿© ÇöÀç ½ÇÇàÁßÀÎ SAS ÇÁ·Î¼¼½ºÀÇ ¸®½ºÆ®¸¦ ȹµæÇÑ´Ù.; * °¢ ÇöÀç ½ÇÇàÁßÀÎ SAS ÇÁ·Î¼¼½º¿¡ ÀÇÇØ »ý¼ºµÈ WORKÇÏÀ§µð·ºÅ丮¸íÀ» »ý¼º; * ÆÄÀÌÇÁ Âü°í : D:\Dµå¶óÀ̺ê\baek\00.ȨÆäÀÌÁö°ü¸®\SAS\1.FUNCTION\F0175.htm; filename pulist pipe &ntrk; data sasprocs(keep=pid workdir index=(workdir)); attrib process length=$18 workdir length=$8 rawpid length=$5 pid length=$5; * ÆÄÀÌÆ® ±â´ÉÀ» ÀÌ¿ëÇÏ¿© PULIST¿¡ ÀÇÇØ »ý¼ºµÈ ÇÁ·Î¼¼½º ¸®½ºÆ® ÀÌ¿ëÇÑ´Ù.; infile pulist lrecl=100 pad; input process rawpid; process = trim(left(upcase(process))); * ÇöÀç ½ÇÇàÁßÀÎ ÇÁ·Î¼¼½ºÁß¿¡¼ SAS ÇÁ·Î¼¼½º¸¸ ¼±ÅÃ; if process =: 'SAS.' and pid ne 'PID' then do; * ÇöÀç ½ÇÇàÁßÀÎ SASÀÇ WORK ÇÏÀ§µð·ºÅ丮 ¸í°ú PID¸¦ ȹµæ; pid = put(input(rawpid,4.),z4.); workdir = trim("_TD" || trim(pid)); output; end; run; filename pulist; ¡¡ * ÇöÀç ½ÇÇàÁßÀÎ SASÇÁ·Î¼¼½º¿Í °ü°è ¾ø´Â WORK ÇϺεð·ºÅ丮 ³»ÀÇ ÆÄÀÏÀ» »èÁ¦Çϰí, WORK ÇϺεð·ºÅ丮¸¦ »èÁ¦ÇÑ´Ù. ¸¸¾à ÇϺεð·ºÅ丮¸¦ »èÁ¦ÇÏÁö ¸øÇϸé, À̺¥Æ®·Î±×¿¡ ¿¡·¯¸¦ ÀÛ¼ºÇÑ´Ù.; * ÇϺεð·ºÅ丮 ³»ÀÇ µð·ºÅ丮¸í(SASDIRS)¿Í ÇöÀç ½ÇÇàÁßÀÎ SASÇÁ·Î¼¼½ºÀÇ µð·ºÅ丮¸í(SASPROCS)¸¦ MERGE; data _NULL_; merge sasdirs(in=a) sasprocs(in=b); by workdir; if a and not b then do; * WORK ÇϺεð·ºÅ丮³»ÀÇ µð·ºÅ丮¸íÀ» ÇÒ´ç; rc = filename('subdir',"&wdir.\" || trim(workdir)); * WORK ÇϺεð·ºÅ丮³»ÀÇ °¢ µð·ºÅ丮 Á¢±ÙÇã°¡; sid = dopen('subdir'); * WORK ÇϺεð·ºÅ丮³» µð·ºÅ丮 ³»ÀÇ ÆÄÀÏ ¼ýÀÚ¸¦ ¾ò´Â´Ù.; numfiles = dnum(sid); do sind=1 to numfiles; * °¢ µð·ºÅ丮 ³»(SID)ÀÇ ÆÄÀÏÀ» Àд´Ù; fname = dread(sid,sind); if fname not in ('.','..') then do; rc = filename('workfile', "&wdir.\" || trim(workdir) || '\' || fname); if rc eq 0 then do; * °¢ µð·ºÅ丮 ³»ÀÇ ÆÄÀÏÀ» ¼øÂ÷ÀûÀ¸·Î ÇÒ´ç; rc = fdelete('workfile'); rc = filename('workfile',''); end; end; end; rc = dclose(sid); * À§¿¡¼ »ý¼ºµÈ WIN32 API¸¦ À§ÇÏ¿© WORK ÇϺεð·ºÅ丮 ³»ÀÇ µð·ºÅ丮 »èÁ¦; rc = modulen('RemoveDirectoryA', "&wdir.\" || trim(workdir)); * ¸¸¾à µð·ºÅ丮¸¦ »èÁ¦ÇÏÁö ¸øÇÒ°æ¿ì ½ÇÇà; if rc ne 1 then do; * À̺¥Æ® ·Î±×¿¡ ¿¡·¯ »ý¼º; xcmd = '"'||&LOGEVENT||'"'||" -s E 'CLEANWRK.SAS failed to delete " || "&wdir.\" || workdir || "'"; call system(xcmd); * ·Î±×¿¡ °æ°í Ãâ·Â; xput = "Warning! CLEANWRK.SAS failed to delete " || "&wdir.\" || workdir; put xput; end; end; run; filename sascbtbl catalog 'work.temp.winapi.source'; * The End; |
2007³â ¹é ½Â ¹Î Á¦ÀÛÇÏ¿´´ä´Ï´Ù.
( http://cafe.daum.net/statsas
, http://www.statwith.pe.kr )