绯莲凝霜's profile爱在左边我在右边PhotosBlogLists Tools Help

Blog


    08 August

    MACRO TO DELETE A FILE FROM SYSTEM

    %MACRO delFile(Fname);
    /************************************************
    * THIS MACRO IS TO DELETE A FILE FROM SYSTEM.   *
    *************************************************
    * AUTHOR: qkaiwei (
    qkaiwei@163.com)             *
    ************************************************/
     
    filename myfile "&Fname";
     
    /*Check whether the specified file exists*/
    %IF %sysfunc(fexist(myfile)) %THEN %DO;
      
    options noxwait noxsync xmin;
      data _null_;x del "&Fname";s=sleep(1);run;
    /*Check whether the specified file has been deleted*/
      %IF %sysfunc(fexist(myfile)) %THEN
        %put **** Error Occurred *****;
      %ELSE
        %put **** Successfully *****;
    %END;
    %ELSE %DO;
       %put **** File Not Exist ****;
    %END;
     
    filename myfile clear;
     
    /************************************************
    *               END OF MACRO                    *
    ************************************************/
    %MEND;
    18 May

    在SAS中显示IP地址

    filename sascbtbl catalog 'WORK.WINAPI.IPADDR.SOURCE';

    data _null_;
      file sascbtbl ;
      infile cards length=len;
      length line $200;
      input line $varying. len;
      put line;
    cards4;
    ROUTINE
      WSAStartup
      MODULE=WSOCK32
      MINARG=8
      MAXARG=8
      STACKPOP=CALLED
      RETURNS=LONG
    ;
    arg 1 NUM INPUT  BYVALUE FORMAT=PIB4. ; * long wVersionRequired ;
    arg 2 NUM UPDATE FDSTART FORMAT=IB2.  ; * int wVersion - lpWSADATA ;
    arg 3 NUM UPDATE         FORMAT=IB2.  ; * int wHighVersion ;
    arg 4 NUM UPDATE         FORMAT=PIB1. ; * byte szDescription (0 To MAX_WSADescription=256) ;
    arg 5 NUM UPDATE         FORMAT=PIB1. ; * byte szSystemStatus(0 To MAX_WSASYSStatus=128) ;
    arg 6 NUM UPDATE         FORMAT=IB2.  ; * int wMaxSockets ;
    arg 7 NUM UPDATE         FORMAT=IB2.  ; * int wMaxUDPDG ;
    arg 8 NUM UPDATE         FORMAT=PIB4. ; * long dwVendorInfo ;

    ROUTINE
      WSACleanup
      MODULE=WSOCK32
      MINARG=0
      MAXARG=0
      STACKPOP=CALLED
      RETURNS=LONG
    ;

    ROUTINE
      gethostname
      MODULE=WSOCK32
      MINARG=2
      MAXARG=2
      STACKPOP=CALLED
      RETURNS=LONG
    ;
    arg 1 CHAR         UPDATE FORMAT=$CSTR200. ; * szHost ;
    arg 2 NUM  BYVALUE UPDATE FORMAT=PIB4.  ; * long dwHostLen;

    ROUTINE
      gethostbyname
      MODULE=WSOCK32
      MINARG=1
      MAXARG=1
      STACKPOP=CALLED
      RETURNS=LONG
    ;
    arg 1 CHAR INPUT FORMAT=$CSTR200. ; * szHost ;

    ;;;;
    run;

    %* WS_VERSION_REQD = 0101x ;

    %let hostname = UNKNOWN;
    %let ipaddr = UNKNOWN;

    data _null_;
      retain v1-v7 0;
      rc = moduleN ('WSAStartup', 0101x, v1, v2, v3, v4, v5, v6, v7);
      if rc ^= 0 then do;
        put "WSAStartup failed";
        stop;
      end;

      if v5 < 1 then do;
        put "SystemStatus < 1";
        stop;   %* require one socket to get ip addr;
      end;

      major = BAND (v1, 000FFx);
      minor = BAND (v1, 0FF00x) / 0100x;

      if major < 1 or (major=1 and minor<1) then do;
        put "WSA version insufficient";
        goto CleanUp;
      end;

      length hostname $200;
      hostname = '';

      rc = moduleN ('gethostname', hostname, 200);
      if rc = -1 then do;
        put 'Unable to gethostname';
        goto CleanUp;
      end;

      lpHost = moduleN ('gethostbyname', hostname);
      hLen  = peek (lpHost+10, 2);
      hAddr = peek (lpHost+12, 4);
      lAddr = peek (hAddr);

      length ipAddr $20;
      ipAddr = ''; dot='';
      do i = 0 to hLen-1;
        ipAddr = trim(ipAddr) || trim(dot) || put (peek (lAddr+i,1), 3.) ;
        dot='.';
      end;

      call symput ('HOSTNAME', trim(hostname));
      call symput ('IPADDR', compress(ipAddr));

    CleanUp:
      rc = moduleN ('WSACleanup');

    stop;

    run;

    %put HOST &HOSTNAME HAS IP ADDRESS &IPADDR;