A Sampler of What's New in Base SAS 9.2

Download Report

Transcript A Sampler of What's New in Base SAS 9.2

A Sampler of What's New
in Base SAS 9.2
[email protected]
Copyright © 2006, SAS Institute Inc. All rights reserved.
Caramel, Nut, or Truffle?
 DATA Step
• User-Written Functions
• Data Set Lists
• Current Input Data Set Name
• INPUT with String Delimiter
 PROC SQL
• Un-PUT
• Faster DISTINCT
 PROC SORT Linguistic Ordering
 Encrypted Macro Storage
Copyright © 2006, SAS Institute Inc. All rights reserved.
Caramel, Nut, or Truffle?
 DATA Step
• User-Written Functions
• Data Set Lists
• Current Input Data Set Name
• INPUT with String Delimiter
 PROC SQL
• Un-PUT
• Faster DISTINCT
 PROC SORT Linguistic Ordering
 Encrypted Macro Storage
Copyright © 2006, SAS Institute Inc. All rights reserved.
Wrap in a Macro
%macro study_day(start, event, study_day);
n = &event - &start;
if n >= 0 then
&study_day = n + 1;
else
&study_day = n;
%mend;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Bug in the Macro
data results;
set trial_data;
n = sum(of visits_jan--visits_dec);
%study_day(start, event, study_day)
if n > 5 then
...
Copyright © 2006, SAS Institute Inc. All rights reserved.
Bug in the Macro
data results;
set trial_data;
n = sum(of visits_jan--visits_dec);
n = event – start;
if n >= 0 then
study_day = n + 1;
else
study_day = n;
if n > 5 then
Copyright © 2006, SAS Institute Inc. All rights reserved.
Protected by a Function
data results;
set trial_data;
n = sum(of visits_jan--visits_dec);
study_day = study_day(start, event);
if n > 5 then
...
Copyright © 2006, SAS Institute Inc. All rights reserved.
Study Day Function
proc fcmp outlib=sasuser.funcs.trial;
function study_day(start, event);
n = event – start;
if n >= 0 then
return(n + 1);
else
return(n);
endsub;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Copyright © 2006, SAS Institute Inc. All rights reserved.
Data Set Lists
 #1 on 2006 SASware Ballot
 Read Like-Named Data Sets
 Syntax borrowed from DROP and KEEP
Copyright © 2006, SAS Institute Inc. All rights reserved.
Read a Bunch of Data Sets
data out;
set a1 a2 a3 a4 a5 a6 a7 a8 a9 a10
a11 a12 a13 a14 a15 a16 a17 a18
a19 a20 a21 a22 a23 a24 a25 a26
a27 a28 a29 a30 a31 a32 a33 a34
a35 a36 a37 a38 a39 a40 a41 a42
a43 a44 a45 a46 a47 a48 a49 a50;
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Data Set Lists
data out;
set a1-a50(pw=pass123);
run;
data out;
set sales.jan:;
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
String Delimiter
 "Top 10" SASware Ballot Item
 Difficult to parse multi-character delimiters
 INFILE DLMSTR=
 Works like DLM=
Copyright © 2006, SAS Institute Inc. All rights reserved.
String Delimiter
data bad_guys;
length date time ip $ 16;
infile datalines dlm=' ' dsd;
input date time ip;
datalines;
"20APR2007"
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
"12:56:46"
"146.16.1.23"
String Delimiter
data bad_guys;
length date time ip $ 16;
infile datalines dlmstr='
' dsd;
input date time ip;
datalines;
"20APR2007"
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
"12:56:46"
"146.16.1.23"
SET with INDSNAME=
 "Top 10" SASware Ballot Item
 Place current data set name into a variable
 SET with INDSNAME = var
Copyright © 2006, SAS Institute Inc. All rights reserved.
SET with INDSNAME=
data results;
set gas_price_option
gas_rbid_option
coal_price_forward
coal_rbid_forward
indsname = cur_dataset;
...
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
DATA Step JavaObj
 "Compute" methods written in Java
 Call from DATA Step with JavaObj
 Methods like Java Native Interface (JNI)
 Uses dot syntax
 Production in SAS 9.2
 Experimental in SAS 9.1.3
Copyright © 2006, SAS Institute Inc. All rights reserved.
DATA Step JavaObj
data results;
declare javaobj jo("myclass");
jo.callDoubleMethod("compute",
x, y, z, res);
...
Copyright © 2006, SAS Institute Inc. All rights reserved.
DATA Step IN Operator
 IN operator used simple array search
 Now, IN searches a binary tree
9
12
Copyright © 2006, SAS Institute Inc. All rights reserved.
14
17
19
23
50
54
67
72
76
DATA Step IN Operator
data _null_;
set customers;
if state in ('NC', 'SC', 'GA',
'TN', 'FL');
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Today
proc format;
value udfmt 1-3='small'
4-6='medium'
7-9='large';
proc sql;
select style as SmallStyles
from oracle.clothes
where put(size, udfmt.) = 'small';
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Today
SAS® Session
select style as SmallStyles
from oracle.clothes
where put(size, udfmt.) = 'small';
DBMS
select style,size from clothes
SAS/Access Engine
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Today
SAS® Session
select style as SmallStyles
from oracle.clothes
where put(size, udfmt.) = 'small';
DBMS
select style,size from clothes
SAS/Access Engine
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Tomorrow
SAS® Session
select style as SmallStyles
from oracle.clothes
where put(size, udfmt.) = 'small';
DBMS
select style as SmallStyles
from oracle.clothes
SAS/Access Engine
where (1 <= size and size <= 3);
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Tomorrow
SAS® Session
select style as SmallStyles
from oracle.clothes
where put(size, udfmt.) = 'small';
DBMS
select style as SmallStyles
from oracle.clothes
SAS/Access Engine
where (1 <= size and size <= 3);
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Today
proc sql;
select name
from oracle.employees
where put(bday, date5.) = '31OCT';
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Tomorrow
proc sql;
select name
from oracle.employees
where month(bday) = 10 and
day(bday) = 31;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Today
proc format;
value nudfmt 0 = 'RED'
1 = 'NOTRED'
2 = 'GREEN'
other = 'BLACK';
proc sql;
select * from oracle.data where
put(color, nudfmt.) contains "RED";
Copyright © 2006, SAS Institute Inc. All rights reserved.
Proc SQL Tomorrow
proc format;
value nudfmt 0 = 'RED'
1 = 'NOTRED'
2 = 'GREEN'
other = 'BLACK';
proc sql;
select * from oracle.data where
color in (0,1);
Copyright © 2006, SAS Institute Inc. All rights reserved.
PROC SQL
 Faster: SELECT DISTINCT
 Faster: COUNT(DISTINCT var)
 Hash Join Performance
 Row Counts from DBMSes
Copyright © 2006, SAS Institute Inc. All rights reserved.
SELECT DISTINCT
proc sql;
create table distinct_values as
select distinct month, year
from customer_info;
quit;
Copyright © 2006, SAS Institute Inc. All rights reserved.
COUNT DISTINCT
proc sql;
create table count_distinct as
select count(distinct customerid)
from customer_info;
quit;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Linguistic Sorting
Obs
Binary
Lowfirst
Linguistic
1
Aaron
aardvark
aardvark
2
Aztec
azimuth
Aaron
3
Zeus
Aaron
azimuth
4
aardvark
Aztec
Aztec
5
azimuth
zebra
zebra
6
zebra
Zeus
Zeus
Copyright © 2006, SAS Institute Inc. All rights reserved.
Linguistic Sorting
proc sort data=names
out=sorted
sortseq=linguistic;
by name;
run;
Copyright © 2006, SAS Institute Inc. All rights reserved.
Numeric_Collation=ON
Obs
Binary
Linguistic
1
0123 Main St. Apt #12
123 Main St. Apt #1
2
123 Main St. Apt #1
123 Main St. Apt #2
3
123 Main St. Apt #103
0123 Main St. Apt #12
4
123 Main St. Apt #2
123 Main St. Apt #24
5
123 Main St. Apt #24
123 Main St. Apt #103
Copyright © 2006, SAS Institute Inc. All rights reserved.
Encrypted Macro Storage
%macro mymac(x, y) / store secure;
...
%mend;
Copyright © 2006, SAS Institute Inc. All rights reserved.
More Details
Search support.sas.com for:
Papers:
"User-Written DATA Step Functions"
"Creating Order out of Character Chaos"
Copyright © 2006, SAS Institute Inc. All rights reserved.