带SQL的数字通配符

带SQL的数字通配符,sql,sas,wildcard,Sql,Sas,Wildcard,我似乎找不到正确的答案。每个人都建议使用where-XX,比如“123%”,但如果变量是数字的话,这就行不通了 select count (studyid) as NumberPersons from &data where numericvariable=6820% and case=0; 我希望count函数计算以6820**(682002、682004等)开头的所有值。正如juergen d在评论中所说: select count(studyid) as Nu

我似乎找不到正确的答案。每个人都建议使用where-XX,比如“123%”,但如果变量是数字的话,这就行不通了

  select count (studyid) as NumberPersons from &data
        where numericvariable=6820% and case=0;

我希望count函数计算以6820**(682002、682004等)开头的所有值。

正如juergen d在评论中所说:

select count(studyid) as NumberPersons from &data where numericvariable / 100 = 6820

会有用的。其他基于10的范围只是从除数中添加/删除0。可以完成更复杂的范围,但不那么容易。

假设这是在SAS中,您无法完成其他建议的操作,因为所有SAS变量都是双精度的

选项:

where floor(numericvariable/100)=6820

where 682000 le numericvariable le 682100

where put(numericvariable,z6.) like '6820%'

如果numericvariable/100=6820FYI,这将不会像所示那样工作,因为没有
int
数据类型,所有数字都是浮点(通常是双精度的),所以你不会像在其他语言中那样得到自动截断。删除我荒谬的评论。对不起,我们大家都这么想就打字:)你的假设是正确的。最好的选择是第三个(切换到字符),这也有点问题-SAS似乎不想正确计数。不确定这意味着什么。您是否有数字精度问题(0.1+0.1+0.1 ne 0.3类型问题)?抱歉,这是我的错。我的意思很模糊。我将变量转换为char变量,但现在,由于某种原因,我在运行sql select count过程时只得到了“0”计数。(这可能只是某个愚蠢的错误).我作弊-我把数字变量截断为四位数,得到了我想要的答案。谢谢大家。@Rainmaker你说的作弊是什么意思?