thekkm13
thekkm13

Reputation: 49

Adding a new Column to existing SAS dataset

I have a SAS dataset that I have created by reading in a .txt file. It has about 20-25 rows and I'd like to add a new column that assigns an alphabet in serial order to each row.

Row 1 A

Row 2 B

Row 3 C .......

It sounds like a really basic question and one that should have an easy solution, but unfortunately, I'm unable to find this anywhere. I get solutions for adding new calculated columns and so on, but in my case, I just want to add a new column to my existing datatable - there is no other relation between the variables.

Upvotes: 0

Views: 7567

Answers (2)

Reeza
Reeza

Reputation: 21274

Not better than Tom's but a brute force alternative essentially. Create the string of Alpha and then use CHAR() to identify character of interest.

data want;
  set sashelp.class;
  retain string 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  letter = char(string, _n_);
run;

Upvotes: 0

Robert Penridge
Robert Penridge

Reputation: 8513

This is kind of ugly and if you have more than 26 rows it will start to use random ascii characters. But it does solve the problem as defined by the question.

Test data:

data have;
  do row = 1 to 26;
    output;
  end;
run;

Explanation:

On my computer, the letter 'A' is at position 65 in the ASCII table (YMMV). We can determine this by using this code:

data _null_;
  pos = rank('A');
  put pos=;
run;

The ASCII table will position the alphabet sequentially, so that B will be at position 66 (if A is at 65 and so on).

The byte() function returns a character from the ASCII table at a certain position. We can take advantage of this by using the position of ASCII character A as an offset, subtracting 1, then adding the row number (_n_) to it.

Final Solution:

data want;
  set have;      
  alphabet = byte(rank('A')-1 + _n_);
run;

Upvotes: 0

Related Questions