• sas:字符中数字的个数


    LIBNAME S '.';
    OPTIONS PS=MAX LS=MAX NOCENTER SASMSTORE=S MSTORED MAUTOSOURCE;
    %MACRO M_NUM_2_9(IN_TABLE,OUT_TABLE,V_NAME,START0,STOP0)/STORE;

    DATA &OUT_TABLE(KEEP=&V_NAME &V_NAME._&START0._&STOP0. NUM_2_9);
    SET &IN_TABLE;
    PRX=PRXPARSE("/2|3|4|5|6|7|8|9/");/*2-9中任意一个数字,区别与/[2-9]/*/
    LEN=&STOP0.-&START0.+1;
    TEXT=SUBSTR(COMPRESS(&V_NAME),&START0.,LEN);
    NUM=0;
    START=1;
    STOP=LENGTH(TEXT);
    CALL PRXNEXT(PRX,START,STOP,TEXT,POSITION,LENGTH);
    DO WHILE(POSITION>0);
    NUM+1;
    CALL PRXNEXT(PRX,START,STOP,TEXT,POSITION,LENGTH);
    END;
    RENAME TEXT=&V_NAME._&START0._&STOP0. NUM=NUM_2_9;
    RUN;
    %MEND;

    1:程序开头包含一个宏程序的加密,执行该部分只需要将生成的sasmacr给他人,别人就可以直接掉包,而看不到源程序

    2.正则表达式中prxparse('/[2-9]/') 与 prxparse('/2|3|4|5|6|7|8|9/')区别是,前者识别的2-9的任意一个出现,CALL PRXNEXT()的length是连续出现2-9数字的个数,而后者对应的length是1;

    调用案例:

    /*案例数据集*/
    LIBNAME S '.';
    DATA S.TEMP;
    INPUT X $40.;
    CARDS;
    89sksa9axx8zCz0z
    Wkc928AES19b1k3nSA3k
    jia0ds1FEWjsdc00-
    89WsksaF9axx8zz0z
    kc92FW819b1k3n3k
    jia0WEFds1jsdc00-
    ;
    RUN;

    /*调用宏*/
    /*LIBNAME S '.'; 定义指向存放宏M_NUM_2_9的sasmacr文件的逻辑库*/
    OPTIONS PS=MAX LS=MAX NOCENTER SASMSTORE=S MSTORED MAUTOSOURCE;/*SASMSTORE=S指向存储宏的逻辑库*/

    %M_NUM_2_9(S.TEMP,S.RESULT_1_12,X,1,12);
    /*参数1:输入数据集
    参数1:输出数据集
    参数3:处理的变量(一个)
    参数4:截取变量的起始位置;
    参数5:截取变量的结束位置;
    */

  • 相关阅读:
    Winform中用了皮肤控件之后,报错:容量超出了最大容量 参数名:capacity
    C# 生成二维码
    T-sql语句修改数据库逻辑名、数据库名、物理名
    ASP.NET MVC中使用jQuery时的浏览器缓存问题
    关于asp.net页面缓存
    关于VS 工具箱灰色,不可用的解决方案
    Android
    如何让一个DIV水平,垂直方向都居中于浏览器?
    cookie.setPath()的用法
    CSS选择器
  • 原文地址:https://www.cnblogs.com/Anni-love-Ferris-wheel/p/6889686.html
Copyright © 2020-2023  润新知