文章目录

  • 简介
  • 字符变量处理
  • 字符处理函数
  • 案例
  • 数值变量处理
  • 取整函数
  • 描述性统计函数
  • 变量类型转换
  • 字符型转换为数值型
  • 数值型转换为字符型
  • 案例


简介

函数类型
数组函数 / 字符函数 / 日期时间函数 / 描述统计函数 / 金融函数 / 数学函数
概率函数 / 随机数函数 / 三角函数 / 特殊函数 / 州和Zip码换算函数

SAS 变量列表
SAS变量列表是对要引用的一组变量的简写形式
在第一个变量名称前需使用OF关键字
四种形式:

  • 序号区间 Total = sum(of Year1-Year4);
  • 名称区间 Total = sum(of Year2--Year4);
  • 名称前缀 Total = sum(of Year:);
  • 特殊SAS名称列表

字符变量处理

字符处理函数
  • SUBSTR 函数 (右侧)
    在赋值语句右侧的SUBSTR 函数可用于提取字符。
    NewVar=SUBSTR(string,start<,length>);
  • PROPCASE 函数
    PROPCASE函数将变量中的所有字符转换为合适的格式。
    (第一个字符为大写,其他的字符为小写 )
    NewVar = PROPCASE(argument <,delimiter(s)>);
  • delimiter(s)是用于分隔的字符。若缺失,默认的分隔符包括空格, /, - ,制表符等
  • SCAN 函数
    用于返回一个字符串中的第 n个词。
    NewVar = SCAN(string,n<,charlist>);
  • 当字符串中的字符值个数少于指定的n 时,返回缺失值。
  • 当n 为负数时,SCAN函数将从字符串的末尾开始选择字符。
  • 创建得到的之前未用LENGTH 语句对进行定义的变量值的长度为200 字节。
  • 第一个字符值前的分隔符无效。
  • 任何的字符或字符组合也可作为分隔符。
  • 两个或更多的连续的分隔符被视为一个分隔符
  • CATX 函数
    CATX 可对字符串进行连接。
    NewVar = CATX(separator, string-1, … ,string-n)
  • separator,是一个字符串,其将会被插入到各连接的参数中。
  • 若之前未用LENGTH语句对NewVar进行定义,则创建的NewVar的长度将为200字节。
  • 连接运算符
    !!||
  • FIND 函数
    FIND函数在目标字符串中搜寻指定的子字符串。
    若要搜寻的子字符串被找到,返回其第一次出现的位置。如果未找到,返回 0值
    Position = FIND(string,substring <,modifiers,startpos> );
  • Modifiers 可以是
    I 表示不区分大小写的搜寻。
    T 表示忽略string和substring中的拖尾空格。
  • startpos 指定从字符串的何处开始搜寻子字符串。
  • SUBSTR 函数(左侧)
    (在赋值语句左侧)用于对字符变量进行字符替换。
    SUBSTR(string,start<,length>)=value;
  • length指定string中被替换字符的长度。若缺失,则从 start 位置到string 最后的所有字符全部进行替换。
  • Length的值不能大于剩余字符的长度(包括尾部空格)
  • TRANWRD函数
    用TRANWRD函数可对字符串中指定的字符值或字符串进行替换或清除。
    NewVar = TRANWRD(source,target,replacement);
  • TRANWRD函数不会移除target或者replacement的尾部空格。
  • 若未预先定义长度,则新变量NewVar 的长度将为200字节。
    若查找的源字符中没有目标字符,则不会发生替换
  • COMPRESS 函数
    可将源字符中的指定字符除去。
    (若不指定要除去的字符,COMPRESS 函数会将源字符
    中的空格全部删去)
    NewVar = COMPRESS(source<,chars>);
  • 其他字符处理函数
  • sas esp教程 sas propcase_字符串

    sas esp教程 sas propcase_字符串_02


  • sas esp教程 sas propcase_取整_03


案例
  • CASE1
data charities;
  length ID $ 5;
  set orion.biz_list;
  if substr(Acct_Code,length(Acct_Code),1)='2';
  ID=substr(Acct_Code,1,length(Acct_Code)-1);
  Name=propcase(Name)
run;

  • CASE2


    STEP1: 将姓和名分开。
    STEP2: 将称谓,名和姓连接。
data labels;
   set orion.contacts;
   length FMName LName $ 15;
   FMName = scan(Name,2,',');            
   LName = scan(Name,1,',');
   FullName = catx(' ',Title,FMName,LName);
run;

proc print data=labels noobs;
	var ID FullName Title;
run;

  • CASE3:


    STEP1: 找到Product中含有Mittens 的观测。将找出的观测中 Product_ID 中的字符替换掉。
    STEP2: 将Luci 修正为Lucky
    STEP3: 用COMPRESS 和PROPCASE 函数来除去Product_ID 中的空格,并确保 Product的正确格式。
data correct;
   set orion.clean_up;
   if find(Product,'Mittens','I') > 0 then do;
      substr(Product_ID,9,1) = '5';
      Product=tranwrd(Product,'Luci ','Lucky ');
   end;
   Product_ID = compress(Product_ID);
   Product = propcase(Product);
run;

proc print data=correct noobs;
run;

数值变量处理

取整函数

ROUND:近似取整 NewVar = ROUND(argument<,round-off-unit(最小近似单位)>);CEIL:向上取整 NewVar = CEIL(argument);FLOOR: 向下取整 NewVar = FLOOR(argument);INT:返回整数部分数值 NewVar = INT(argument);

描述性统计函数

sas esp教程 sas propcase_Code_04

  • 所有参数均需为数值型。
  • 参数可以是以OF开头的变量列表。
  • SUM, MEAN, MAX, 和MIN函数会忽略参数中的缺失值

变量类型转换

字符型转换为数值型
  • 自动转换
    在数值型环境下,SAS 会自动将字符型变量转换为数值型变量
    → 适用情境:
  • 赋值给一个数值型变量
  • 使用了算术运算符
  • 和数值进行逻辑比较
  • 用于一个需要数值型参数的函数

需使用w. 输入格式;对不符合标准数值格式的字符以数值缺失值表示【含有逗号的变量值(1,742.64),不能使用w. 输入格式自动转换,因为被赋为缺失值;要进行强制转换】

  • INPUT 函数强制转换
    INPUT函数以一个指定的输入格式对原数据进行读取并返回相应的值(不会有转换信息输出至日志窗口)
    NumVar = INPUT(source,informat);
  • sas esp教程 sas propcase_字符串_05


data Input_Quiz;
   SharePrice = "$130.25"; 
   MyShares = 125;
   TotalValue = input(SharePrice,comma7.)*MyShares;
run;
  • 将字符型变量转换为另一数据类型
    一个变量只能是字符型或数值型二者之一。当变量的数据类型被确定后就不能改变。
    GrossPay=input(GrossPay,comma6.); 错误!GrossPay原本是字符型,不能被赋值为数值型
    正确方法:
    STEP1: 用RENAME=对想要转换的变量进行重命名。
    STEP2: 使用INPUT函数于赋值语句中,创建同名的新变量。
    STEP3: 在DATA语句中使用DROP= 选项将原变量从输出 数据集中删去。
    (该程序的编译过程中, PDV 里创建了一个名为 GrossPay 的新的数值型变量。)
data hrdata(drop=CharGross);
	set orion.convert(rename=(GrossPay=CharGross));
	GrossPay=input(CharGross,comma6.); 
run;
数值型转换为字符型
  • 自动转换
    在字符环境下,SAS会自动将数值型数据转换为字符类型。
  • 适用情境:
    → 赋值给一个字符型变量
    → 用于连接算符
    → 用于使用字符型参数的函数
  • 注意:
    → 自动转换使用BEST12. 输出格式
    → 将字符型数据进行右对齐
    (要进行修正,使用PUT函数将数值型强制转换为字符型)
  • PUT 函数强制转换
    PUT 函数用指定的输出格式将数据输出; 返回原数据应用输出格式后相应的值。
    CharVar = PUT(source,format);
  • 常用输出格式
    W.d 写入数值型数值作为字符型数值
    Zw. 写入数值型数值,在前端插入0
  • CAT 函数和数值转换
    CAT族函数按BEST12. BEST12. 格式将数值型参数转换为一个字符串,并删去其前置的空格。日志中不出现相应的提示信息。
Phone=cat('(',Code,') ',Mobile);
Phone='(' !! put(Code,3.) !! ') ' !! Mobile;

案例

sas esp教程 sas propcase_Code_06

sas esp教程 sas propcase_取整_07

data hrdata;
   keep EmpID GrossPay Bonus Phone HireDate;
   set orion.convert(rename=(GrossPay=
                             CharGross));
   EmpID = input(ID,5.)+11000;
   GrossPay = input(CharGross,comma6.);
   Bonus = GrossPay*.10;
   HireDate = input(Hired,mmddyy10.);
   Phone=cat('(',Code,') ',Mobile);
run;

proc print data=hrdata noobs;
   var EmpID GrossPay Bonus Phone HireDate;
   format HireDate mmddyy10.;
run;

在PROC CONTENTS语句中使用 VARNUM 选项,可将数据集中的所有变量按其逻辑顺序输出。