SAS data步的操作技能点_3

本文介绍了SAS编程中的几个实用技巧,包括日期计算、字符串拼接、数据输出、数据集合并及函数使用等。通过具体示例展示了如何进行日期计算、字符串处理、文件输出以及数据集的合并操作。

1、日期计算

DATA age;

INFILE 'e:/11/6/tomdate.dat' ;

INPUT

  @1  randdate mmddyy10.   

  @12  brthdate mmddyy10. 

  @23 date12mmddyy10. ;

agedays =randdate - brthdate ;

ageyrs  = (randdate - brthdate)/365.25;

ageint  = INT( (randdate - brthdate)/365.25);

 

agetoday=(TODAY() - brthdate)/365.25 ;

ageendst= (MDY(02,28,1992)- brthdate)/365.25;

 

daysv12 =date12 - randdate;

 

if ABS(daysv12 -365) =.  then window12 =.;else

if ABS(daysv12 -365) < 31then window12 =1;else

if ABS(daysv12 -365) >=31thenwindow12 =2;

 

yrrand =YEAR(randdate);

format  randdate mmddyy10.  

format  brthdate mmddyy10.

format  date12  mmddyy10.

run;

2、字符串拼接

DATA names;

 INFILE DATALINESDSD;

 INFORMAT fname$20.lname$20. mi$1. ;

 INPUT lname fname mi ;

 LENGTH fnamemix$20.lnamemix$20. fullname$44.;

 

* name中抽取第一个字符,然后接上从第二个字符开始的所有的字符的小写 ;

 

  fnamemix = SUBSTR(fname,1,1) || LOWCASE(SUBSTR(fname,2));

  lnamemix = SUBSTR(lname,1,1) || LOWCASE(SUBSTR(lname,2));

 

* 连接3个名字,并删除多余的空格;

  fullname = COMPBL (fnamemix || mi ||'. ' || lnamemix ) ;

 

DATALINES;

GRANDITS,GREGORY, A

SIU, YI, W

;

run;

3、输出数据

data _null_;

    set hf.en_name;

    file'd:\mydb\stu1.txt';

    put cn_name$'09'x'---' en_name$;

run;

4、主键,两数据集合并

//创建数据集,ID是主键

DATA baseline;

 INFILE DATALINES;

 INPUT id $ sbp ;

 

DATALINES;

   C03615    115

   B00979    107

   B00644    138

   D01348    142

   A01088    117

  ;

DATA followup;

 INFORMAT datedthmmddyy8.;

 INFILE DATALINES;

 INPUT id $ datedth cause;

DATALINES;

   B00714 01/13/92 3

   D02027 03/19/91 1

 ;

//排序

PROCSORTDATA= baseline;BY id;

PROCSORTDATA= followup;BY id;

//合并

DATA all;

 MERGE baseline followup;

 BY id ;

RUN;

//在第二个数据集合的纪录补充上第一个数据集合的有关信息

DATA deaths;

 MERGE baseline (IN=in1)

       followup (IN=in2);

  BY id;

  if in2;

RUN

5、Tranwrd(替换指定字符),scan(扫描字符位置)函数使用,替换指定字符,扫描不同位置的字符串

wrd,scan函数使用,替换指定字符,扫描不同位置的字符串Tranwrd,scan函数使用,替换指定字符,扫描不同位置的字符串

data a2;

 set hf.a1;

 sname= scan(tranwrd(namedetail,'///','|'),1,'|') ;

 detail1= scan(tranwrd(namedetail,'///','|'),2,'|') ;

run;



评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值