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 2025: Call for Content

Are you ready for the spotlight? We're accepting content ideas for SAS Innovate 2025 to be held May 6-9 in Orlando, FL. The call is open until September 25. Read more here about why you should contribute and what is in it for you!

Submit your idea!

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.

Click image to register for webinarClick image to register for webinar

Classroom Training Available!

Select SAS Training centers are offering in-person courses. View upcoming courses for:

View all other training opportunities.

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