BookmarkSubscribeRSS Feed
ZRick
Obsidian | Level 7

data difference (drop=goalamount)/**/;

    length goalamount 8 ;

    if _n_=1 then    do;

        declare hash goal();

            goal.definekey('QtrNum');

            goal.definedata("goalamount");

            goal.definedone();

            /*avoid the NOTE of "var uninitialized "*/

            call missing(qtrnum,goalamount);

          goal.add(key:'qtr1', data:10);

            goal.add(key:'qtr1', data:15);

            goal.add(key:'qtr3', data:5);

            goal.add(key:'qtr4', data:15);

    end;

    set sasuser.contrib;

    goal.find();

    Diff=amount-goalamount;

run;

Define a hash object, log keeps saying

"

ERROR: Variable QtrNum has been defined as both character and numeric.

"

I don't get where I cause the error? I checked Listserv, but still don't know how to fix this.

This example is from advanced sas certification, chapter 17, hash object definition, hard-code section, this is a buggy code, just doesn't work.

4 REPLIES 4
Ksharp
Super User

Did you define the type of QtrNum before defining Hash Table?

data difference (drop=goalamount)/**/;

    length goalamount 8 ;

    if _n_=1 then    do;

    length QtrNum $ 8;

        declare hash goal();

            goal.definekey('QtrNum');

            goal.definedata("goalamount");

            goal.definedone();

            /*avoid the NOTE of "var uninitialized "*/

            call missing(qtrnum,goalamount);

          goal.add(key:'qtr1', data:10);

            goal.add(key:'qtr1', data:15);

            goal.add(key:'qtr3', data:5);

            goal.add(key:'qtr4', data:15);

    end;

    set sasuser.contrib;

    goal.find();

    Diff=amount-goalamount;

run;

Ksharp

ZRick
Obsidian | Level 7

It still didn't work, now it says:

ERROR: Duplicate key.

ERROR: Key not found.

ERROR: Key not found.

ERROR: Key not found.

ERROR: Key not found.

ERROR: Key not found.

ERROR: Key not found.

Ksharp
Super User

OK. you need add a return code before Hash methods.

         rc=goal.add(key:'qtr1', data:10);

           rc=goal.add(key:'qtr1', data:15);

            rc=goal.add(key:'qtr3', data:5);

            rc=goal.add(key:'qtr4', data:15);

           rc=goal.find();

Ksharp

tian
Calcite | Level 5

I got the same problem, and I believe there is an typo on the book"SAS Certification Prep Guide-Advanced Programming for sas 9", page 606.

the code:     "length goalamount 8;" should be changed to: "length qtrnum $8  goalamount 8;"

I submitted the following program, and it runs with no error:

data diffe (drop=goalamount);
length goalamount 8 qtrnum $4;
if _N_=1 then do;
declare hash goal();
goal.definekey("qtrnum");
goal.definedata("Goalamount");
goal.definedone();
call missing(qtrnum, goalamount);
goal.add(key:'qtr1',data:10);
goal.add(key:'qtr2',data:15);
goal.add(key:'qtr3',data:5);
goal.add(key:'qtr4',data:15);
end;

set tian.contrib;
rc=goal.find();
diff=amount-goalamount;
run;

sas-innovate-2026-white.png



April 27 – 30 | Gaylord Texan | Grapevine, Texas

Registration is open

Walk in ready to learn. Walk out ready to deliver. This is the data and AI conference you can't afford to miss.
Register now and lock in 2025 pricing—just $495!

Register now

How to Concatenate Values

Learn how use the CAT functions in SAS to join values from multiple variables into a single value.

Find more tutorials on the SAS Users YouTube channel.

SAS Training: Just a Click Away

 Ready to level-up your skills? Choose your own adventure.

Browse our catalog!

Discussion stats
  • 4 replies
  • 2222 views
  • 1 like
  • 3 in conversation