Download presentation
Presentation is loading. Please wait.
Published byRandall Baldwin Modified over 8 years ago
1
Do not put content on the brand signature area NOBS for Noobs David B. Horvath, CCP, MS PhilaSUG Winter 2015 Meeting NOBS for Noobs
2
2 The Author can be contacted at: 504 Longbotham Drive, Aston PA 19014-2502, USA Phone: 1-610-859-8826 Email: dhorvath@cobs.com Web: http://www.cobs.com/ All trademarks and servicemarks are the property of their respective owners. Copyright © 2015, David B. Horvath, CCP — All Rights Reserved
3
Abstract This mini-session will be a short discussion of the NOBS (number of observations) option on the SET statement. This includes one "gotcha" that I've run into with where clauses: NOBS is set before WHERE processing. If you have a reason to know the number of observations after the WHERE clause, another DATA step is needed. 3
4
4 My Background Base SAS on Mainframe, UNIX, and PC Platforms SAS is primarily an ETL tool or Programming Language for me My background is IT – I am not a modeler Not my first User Group presentation – presented sessions and seminars in Australia, France, the US, and Canada. Undergraduate: Computer and Information Sciences, Temple Univ. Graduate: Organizational Dynamics, UPenn Most of my career was in consulting Have written several books (none SAS-related) Adjunct Instructor covering IT topics.
5
5 Basic NOBS The nobs statement is a handy way of discovering how many observations are in your SAS Dataset: data simple; a = 42; output; run; data _null_; put nobs=; stop; set simple nobs=nobs; run; Prints NOBS=1
6
6 Macro NOBS Great information if you need it! Is available before first row is processed Can be stored in macro variable for global usage: data _null_; call symput('ALLOBS', nobs); stop; set simple nobs=nobs; run; data _null_; put "number of obs are &ALLOBS."; stop; run; Prints number of obs are 1
7
7 NOBS – the catch: where Processing is at the file level – before the where clause: data _null_; put nobs=; stop; set simple nobs=nobs; run; And data _null_; put nobs=; stop; set simple nobs=nobs; where a = 10; run; Both print the same result: NOBS=1
8
8 NOBS – the catch: where I found out the hard way I had a process that rsubmitted N jobs to process the objects within an XML file Each of the N jobs processed 1/Nth of the objects to spread load Process worked fine until the user said "Don't bother with THESE tables". I figured "Oh, this is SAS, this is an easy change: ' where TABLE not in (THESE1, THESE2,... THESEn) '". The process worked fine but runtimes went up – no longer were N processes running; the last 2 never started up. Solution was to add another data step in front to execute the ' where ' Input to the rsubmit process now had the correct nobs
9
9 NOBS – the catch: not a new variable Your nobs variable is special – it will not appear in the output dataset data new; set simple nobs=nobs; run; proc print data=new; run; Prints Obs a 1 42 Coding the nobs variable in a keep statement is not a fix: data new (keep=a nobs); WARNING: The variable nobs in the DROP, KEEP, or RENAME list has never been referenced. Only solution is an equal sign (even retain does not help): nnobs=nobs;
10
10 NOBS – the catch: options obs= Is independent of options obs=; options obs=2; data _null_; put nobs=; stop; set large nobs=nobs; run; And (obs=) data _null_; put nobs=; stop; set large(obs=2) nobs=nobs; run; Both print nobs=915803
11
11 NOBS – the catch: not every engine The XML Engine does not properly implement: filename SXLEMAP "OUR_MAP_FILE.map"; filename test2 "OUR_INPUT_FILE.xml"; libname test2 xml xmlmap=SXLEMAP access=READONLY; NOTE: Libref TEST2 was successfully assigned as follows: Engine: XML Physical Name: TEST2 data _null_; put nobs=; stop; set test2.application nobs=nobs; run; Printing nobs=9.0071993E15 When the file only contained 17,383,357 bytes
12
12 Wrap Up Questions and Answers ?! ? ? ? ? ! ! ! !
Similar presentations
© 2024 SlidePlayer.com. Inc.
All rights reserved.