将新列添加到现有SAS数据集

时间:2016-08-10 23:11:59

标签: sas

我有一个通过读取.txt文件创建的SAS数据集。它有大约20-25行,我想添加一个新列,按行顺序为每一行分配一个字母。

第1行

第2行B

第3行 .......

这听起来像一个非常基本的问题,应该有一个简单的解决方案,但不幸的是,我无法在任何地方找到它。我得到了添加新计算列等的解决方案,但在我的情况下,我只想在现有数据表中添加一个新列 - 变量之间没有其他关系。

2 个答案:

答案 0 :(得分:0)

这有点难看,如果你有超过26行,它将开始使用随机的ascii字符。但它确实解决了问题所定义的问题。

测试数据:

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

<强>解释

在我的计算机上,字母“A”位于ASCII表(YMMV)中的第65位。我们可以使用以下代码来确定:

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

ASCII表将按顺序排列字母,以便B位于66位置(如果A位于65,依此类推)。

byte()函数返回某个位置的ASCII表中的字符。我们可以通过使用ASCII字符A的位置作为偏移量,减去1,然后将行号(_n_)添加到其中来利用此功能。

最终解决方案:

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

答案 1 :(得分:0)

并不比汤姆更好,但基本上是一种蛮力的选择。创建Alpha字符串,然后使用CHAR()来识别感兴趣的字符。

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