DEFINEDATA Method

Defines data, associated with the specified data variables, to be stored in the hash object.
Applies to: Hash object

Syntax

rc=object.DEFINEDATA('datavarname-1'<, ...'datavarname-n'>);

Arguments

rc
specifies whether the method succeeded or failed.
A return code of zero indicates success; a nonzero value indicates failure. If you do not supply a return code variable for the method call and the method fails, then an appropriate error message is written to the log.
object
specifies the name of the hash object.
'datavarname'
specifies the name of the data variable.
The data variable name can also be enclosed in double quotation marks.
ALL: 'YES' | “YES”
specifies all the data variables as data when the data set is loaded in the object constructor.
If the dataset argument tag is used in the DECLARE statement or _NEW_ operator to automatically load a data set, then you can define all the data set variables as data by using the ALL: 'YES' option.

Details

The hash object works by storing and retrieving data based on lookup keys. The keys and data are DATA step variables, which you use to initialize the hash object by using dot notation method calls. You define a key by passing the key variable name to the DEFINEKEY method. You define data by passing the data variable name to the DEFINEDATA method. When you have defined all key and data variables, you must call the DEFINEDONE method to complete initialization of the hash object. Keys and data consist of any number of character or numeric DATA step variables.
Note: If you use the shortcut notation for the ADD or REPLACE method (for example, h.add(key:99, data:'apple', data:'orange')) and use the ALL:'YES' option on the DEFINEDATA method, then you must specify the data in the same order as it exists in the data set.
Note: The hash object does not assign values to key variables (for example, h.find(key:'abc')), and the SAS compiler cannot detect the key and data variable assignments that are performed by the hash object and the hash iterator. Therefore, if no assignment to a key or data variable appears in the program, then SAS will issue a note stating that the variable is uninitialized. To avoid receiving these notes, you can perform one of the following actions:
  • Set the NONOTES system option.
  • Provide an initial assignment statement (typically to a missing value) for each key and data variable.
  • Use the CALL MISSING routine with all the key and data variables as parameters. Here is an example:
    length d $20;
    length k $20;
    if _N_ = 1 then do;
       declare hash h();
       rc = h.defineKey('k');
       rc = h.defineData('d');
       rc = h.defineDone();
       call missing(k,d);
    end;
For detailed information about how to use the DEFINEDATA method, see Defining Keys and Data in SAS Language Reference: Concepts.

Example

The following example creates a hash object and defines the key and data variables:
data _null_;
   length d $20;
   length k $20;
   /* Declare the hash object and key and data variables */
   if _N_ = 1 then do;
      declare hash h();
      rc = h.defineKey('k');
      rc = h.defineData('d');
      rc = h.defineDone();
      /* avoid uninitialized variable notes */
      call missing(k, d);
   end;
run;