剥离和转换将尾随空格转换为尾随破折号

时间:2016-09-28 20:03:45

标签: sas

我正在尝试将我读过的文本文件名转换为SAS 9.0版中的合法数据集名称。

我使用的代码是这样的(其中fnames是包含文本文件名的数据集):

data fnames;
set fnames;
filename2 = scan(filename, 1, '.');
filename3 = tranwrd(filename2, "_", "-");
filename4 = strip(filename3);
filename5 = tranwrd(filename4, " ", "-");
/*filename4 = compress(filename3);*/
filename4 = cats('_', filename4);
drop filename2 filename3;
run;

我希望这用文本名称替换文件名中的任何空格,而不是文件名末尾的尾随空格(字段长度和格式都是200美元。但字符串长度本身是可变的。我的输入看起来像这样:

1080528-19-08-2016-Man Utd-v-Southampton.txt

...我的输出如下:

1080528-19-08-2016-Man-Utd-v-Southampton----------------------------------------------------------------------------------------------------------------------------------------------------------------

......当它看起来像这样:

1080528-19-08-2016-Man-Utd-v-Southampton

有人可以告诉我需要改变什么吗?

由于

1 个答案:

答案 0 :(得分:2)

所有SAS字符变量在其长度的末尾都包含空格。这是不可避免的 - 因此每次翻译空间时都需要始终使用TRIM。你不能像你那样零碎地工作 - strip并没有真正做得多(如果它还没有,它会左对齐,但是那个'因为它没有摆脱那些空间。 SAS中没有varchar概念。

所以,这个:

filename5 = tranwrd(filename4, " ", "-");

需要:

filename5 = tranwrd(trim(filename4), " ", "-");

至少。

我会注意到,当_合法地成为SAS数据集名称并且-不属于_时,您将-转换为filename_fin = cats('_',translate(scan(filename,1,'.'),'__',' -')); 的原因令人困惑通常。

也许:

data _null_;
  length filename $200;
  filename= '1080528-19-08-2016-Man Utd-v-Southampton.txt';
  filename_fin = cats('_',translate(scan(filename,1,'.'),'__',' -'));
  put +4 filename= / filename_fin=;
run;

所以:

memname

我会注意到这仍然可能不是有效import redis r = redis.StrictRedis(host='localhost', port=6379, db=0) for key in r.scan_iter("key_pattern*"): print key ,因为它超过32个字符。