SAS进阶(一)— 字符型数据清洗

文章目录

      • 一、字符型数据操作
          • 1)主要清洗方法
          • 2)字符型函数
      • 二、使用Perl正则表达式检查数据错误
          • 1)正则表达式
          • 2)正则表达式的应用
          • 3)正则表达式测试的宏程序
      • 三、数据标准化
          • 1)主要标准化方法
          • 2)两个文件数据的模糊匹配

一、字符型数据操作

1)主要清洗方法
  • 少量非法值检查
    • FREQ过程 *1.2
  • 非法值检查输出
    • DATA_null_步+file print +PUT语句输出 (字符数据模式判别) *1.4-1.5
    • PRINT过程步+WHERE语句输出 *1.6
    • FORMATS自定义格式 (将数据格式化合法、非法和缺失值三类) (可以创建永久型格式,优选) *1.7-1.9
  • 非法值处理
    • 大小写转换 (upcase函数等) *1.3
    • 消除单位和字符数据中无法打印的字符 (compress函数) *1.10
2)字符型函数
大小写转换函数
upcase 小写转换成大写
lowcase 大写转换成小写
propcase 每个单词首字母变成大写,其他为小写(有第二个可选参数作为单词之间的分隔符,默认为空格)
判断和搜索函数 前三个函数都有第二个可选参数用于指定搜索的初始位置(-n表示在位置n从右向左搜索),搜索失败返回0
notdigit 搜索非数字字符首次出现的位置并返回整数值
notalpha 搜索非字母字符首次出现的位置并返回整数值
notalnum 搜索非字母数字字符首次出现的位置并返回整数值
findc (<.source><,chars><,modifiers>) 用于搜索source的值是否出现chars设定的字符列表,modifier同compress
missing 判断缺失
空格去除函数
compbl 字符串中空格压缩标准化(连续出现的多个空格转为一个空格)
trimn 去除给定字符串的尾部空格
strip 去除给定字符串的首尾空格
verify函数 (source,excerpt1<,excerptn>)
verify 检验当前字符串source是否满足特定字符串excerpt
返回source中未在任何excerpt中出现的第一个字符的位置,失败返回0
e.g. verify(“X123”,“12345XYZ”) = 0;verify(“X4321”,“123XYZ") = 2
compress函数 (<.source><,chars><,modifiers>)
compress 删除字符串中的特定字符(应用:消除数据单位和清除无法打印字符)
e.g. compress(“Abe Lincoln”) = “AbeLincoln” (一个参数消除空格)
compress(“ABC123”,“B2”) = “AC13” (去除串中的字符’B’和’2’)
compress(“abc12345xyz”,“a”) = “12345” (去除字母)
compress(“10 kgs.”,“kd”) = “10” (保留数字,去除其他)
compress(“AaBbCc”,“ab”,“i”) = “Cc” (不区分大小写去掉字母’a’,’b’,’A’,’B’)
compress(“12345abcde”,“3”,“a”) = “1245” (清除字符’3’和所有字母)
compress(Char_Value,‘kad’) (保留字母+数字)
compress(Char_Value,‘kadps’) (保留字母+数字+标点+空格类字符)
compress(Char_Value,’. –’,‘kad’) (保留字母+数字+句点+空格+负号)

SAS进阶(一)— 字符型数据清洗_第1张图片


二、使用Perl正则表达式检查数据错误

1)正则表达式
  • 正则表达式 (regex):以分隔符(常用斜杠/)开始,紧跟字符和元字符的组合,并以相同分隔符结束;常用于描述文本模式 e.g. /\d\d\d-\d\d-\d\d\d\d/ or /\d{3}-\d{2}-\d{4}/
    元字符(Meta-character):描述字符的类别(如数字或比标点)等属性
  • 正则表达式函数:以PRX (Perl Regular Expression) 开头
正则表达式函数
prxparse (perl-regular-expression)
查找子字符串的位置
prxmatch (regular-expression-id | perl-regular-expression, source)
搜索模式匹配并返回找到该模式的位置,失败为0
prxchange (regular-expression-id | perl-regular-expression, times, source)
times表示替换的次数,times=-1表示不停止直到全部替换
data null;
   /* Use PRXPARSE to compile the Perl regular expression. */
   patternID = prxparse(/world/);
   /* Use PRXMATCH to find the position of the pattern match. */
   position=prxmatch(patternID, ‘Hello world!);
   *position=prxmatch(/world/, ‘Hello world!);/*两者等价*/
   put position=;
run;
  • 正则表达式元字符(符号) *2.1
    SAS进阶(一)— 字符型数据清洗_第2张图片补充上面的表格:
    • /:分隔符,表示正则表达式的开始或结束
    • s/:正则表达式开头,用于正则表达式的替换(紧跟正则表达式其后的条目实现替换操作e.g. /xxx/ / 表示将xxx替换成空格)
    • \b : 单词边界(字符串的开头、结尾或单词字符后面的空格)
    • \s:空格边界(匹配空格、制表符和换页符等空格类符号)
    • \s$*:表示串结束前有零个或多个空格
    • {n,m}: 表示n次到m次
    • /i: 正则表达式结尾,表示不区分大小写
    • |:管道符号,表示匹配两边任何一个条目
2)正则表达式的应用
  • 邮政编码合法性检查 *2.2-3
  • 电子邮箱合法性检查 *2.4
  • 电话号码合法性检查
  • 电话号码标准化程序 *2.5
3)正则表达式测试的宏程序

*2.6


三、数据标准化

1)主要标准化方法
  • 使用格式步标准化 *3.2-3.3
    FORMAT过程步创建格式 → DATA步使用put函数
  • 使用数据集创建格式 *3.4-3.6
    创建含原始名和标准名的数据集 → DATA步进行数据集的转换
  • 使用tranwrd等函数标准化 *3.7-3.8
new_string = tranwrd(string,find,replace)
  • 使用正则表达式标准化 *3.9
    见正则表达式部分,用prxchange函数
2)两个文件数据的模糊匹配
  • SQL过程:创建数据及连接的笛卡尔积、where语句进行完全或近似匹配
  • 模糊匹配函数:spedis (string1,string2)
    *3.10-3.13

你可能感兴趣的:(SAS)