我有一个通过读取.txt文件创建的SAS数据集。它有大约20-25行,我想添加一个新列,按行顺序为每一行分配一个字母。
第1行
第2行B
第3行 .......
这听起来像一个非常基本的问题,应该有一个简单的解决方案,但不幸的是,我无法在任何地方找到它。我得到了添加新计算列等的解决方案,但在我的情况下,我只想在现有数据表中添加一个新列 - 变量之间没有其他关系。
答案 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;