- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
截断字符串
我有多个数据表,其中包含一个名为“在版本中找到”的列。主要版本通常是 4 位数字——次要版本有时会在主要版本号的末尾附加一个字母字符。出于绘图的目的,我不想显示次要版本 --- 相反,我想将次要版本与其关联的主要版本合并。例如...如果主要版本是 5.1.2.1 那么我希望次要版本 5.1.2.1a 也被称为 5.1.2.1 .....
在混合中抛出另一个皱纹----我可能还想将所有 5.1.2.x 转换为 5.1.2---- 所以 5.1.2.0、5.1.2.2a、5.1.2.3、5.1.2.4a等...将成为版本 5.1.2
当前列为‘Character’、‘Nominal’……我正在考虑根据需要/期望的详细程度将列中的字符串“截断”为 7 个字符或 5 个字符 --- 但我不确定该怎么做,或者是否有更好的方法。
此外 --- 我从不同的团队接收数据表 --- 每个团队似乎都有不同的版本控制方案 --- 因此必须内置灵活性 ----- 不确定我是否必须分析每个数据element s,并比较常见字符以查看它们是否“属于”同一版本???
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
Accepted Solutions
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
这里的答案非常有帮助,让我觉得我可能把它弄得太复杂了——所以我尝试了字符函数“左”,但上周无法让它工作……我的语法一定是“关闭”了 --- 因为它今天对我有用..
对于每一行(:在 Vers Truncated 中找到=左(:在版本中找到,7)); |
---- 这只是将字符串截断到最左边的字符......这将去除较小版本的字符 --- 因为来自不同团队的版本号不一致(一些团队使用 4 位数字附加字母字符,有些使用没有附加字母字符的 3 位数字)我认为这种方法可能有效,但我必须测试使用哪个版本方案来确定截断级别....
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
你好,
不确定这是否是您想要的:
数据有;
输入 old :$10.;
牌;
5.1.2
5.1.2.1
5.1.2.1e
;
数据需要;
新长度 $5;
设置有;
新=旧;
跑步;
过程打印;运行;
海阔
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
这样就可以了。遍历所有值并使用正则表达式来测试每个值。
dt =当前数据表() ;
dt <<新专栏( “发现在 Vers Truncated” ,特点,名义上的) ;
为了(我= 1个,我<=行( dt ) ,我++,
测试值=柱子( dt , “在版本中找到” )[我] ;
// 查看最后一个字符是否是 a 到 z 之一
如果(不见了(正则表达式(测试值, “[az]$” )) ,
// 然后
柱子( dt , “发现在 Vers Truncated” )[我] =测试值;
,
// 别的
one_length =长度(测试值) ;
柱子( dt , “发现在 Vers Truncated” )[我] =子字符串(测试值, 1个, ( one_length - 1个)) ;
) ;
) ;
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
抱歉使用 SAS 代码,因为我不是 JMP 用户……也许 JMP 中存在等效函数?
这非常简单也非常愚蠢,所以数据必须非常一致:
数据有;
长度 FoundInVersion $32;
输入 FoundInVersion $;
牌;
5.1.2.1
5.1.2.2
5.2.2.2a
5.2.2.3
5.2.2.3x
5.2.2.9
5.2.2.9奇怪
跑步;
数据需要;
长度 FoundInVersionGood $32;
设置有;
/* 使用句点作为分隔符,扫描第一个、第二个和第三个单词 (SCAN),然后将它们与句点 (CATX) 连接起来。 */
/* 假设总会有至少三个级别 */
FoundInVersionGood = catx(".", 扫描(FoundInVersion,1,"."), 扫描(FoundInVersion,2,"."), 扫描(FoundInVersion,3,"."));
跑步;
汤姆
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
另一方面,这是 ETL 的核武器,保证可以处理所有事情,但工作量更大。 如果您的不同供应商遵循截然不同的流程,您可能会发现这是唯一的选择。
只需为每个供应商创建一个唯一的一致性表:
数据有;
长度 FoundInVersion $32;
输入 FoundInVersion $;
牌;
5.1.2.1
5.1.2.2
5.2.2.2a
5.2.2.3
5.2.2.3x
5.2.2.9
5.2.2.9奇怪
跑步;
数据master_conversion;
长度 FoundInVersionGood FoundInVersion $32;
输入 FoundInVersionGood $ FoundInVersion $;
牌;
5.1.2 5.1.2.1
5.1.2 5.1.2.2
5.2.2 5.2.2.2a
5.2.2 5.2.2.3
5.2.2 5.2.2.3x
5.2.2 5.2.2.9
5.2.2 5.2.2.9奇怪
跑步;
进程 sql;
创建表想要作为
选择 FoundInVersionGood 作为 FoundInVersion
来自 master_conversion 内连接
有 (master_conversion.FoundInVersion = have.FoundInVersion);
辞职;
汤姆
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
我认为正则表达式 (regex()) 可以解决这个问题。
Newcolumn("在主要版本中找到",字符,标称,
公式(正则表达式(:在版本中找到,“。*?(\d+\.\d+\.\d+)。*”,“\1”)
);
".*?(\d+\.\d+\.\d+).*" 表示找到足够的任何东西,.*?,后跟任意长度的数字,\d+,一次十进制,\.,一个数字任意长度,\d+,小数一次,\. ,任意长度的数字,\d+,后跟任何内容。 只返回括号中的部分,数字和小数,\1。
对于次要版本,将正则表达式 (regex()) 更改为多一位小数和数字。
Newcolumn("在次要版本中找到",字符,标称,
公式(正则表达式(:在版本中找到,“。*?(\d+\.\d+\.\d+\.\d+)。*”,“\1”)
);
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Get Direct Link
- Report Inappropriate Content
回复:截断字符串
这里的答案非常有帮助,让我觉得我可能把它弄得太复杂了——所以我尝试了字符函数“左”,但上周无法让它工作……我的语法一定是“关闭”了 --- 因为它今天对我有用..
对于每一行(:在 Vers Truncated 中找到=左(:在版本中找到,7)); |
---- 这只是将字符串截断到最左边的字符......这将去除较小版本的字符 --- 因为来自不同团队的版本号不一致(一些团队使用 4 位数字附加字母字符,有些使用没有附加字母字符的 3 位数字)我认为这种方法可能有效,但我必须测试使用哪个版本方案来确定截断级别....
This post originally written in English (US) has been computer translated for you. When you reply, it will also be translated back to English (US).