首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >能否/如何创建按接收到的数据类型进行区分的if条件语句。SAS

能否/如何创建按接收到的数据类型进行区分的if条件语句。SAS
EN

Stack Overflow用户
提问于 2021-04-12 19:59:20
回答 1查看 36关注 0票数 0

我是SAS的新手,目前正在处理一个相当大的数据集。我收到以下类型的错误:

注意:无效的数字数据,'dev‘,第1304行,第173列。

我想创建此类型的%if条件语句:

如果输入数据是数字,则如果是格式,则继续。20。

我该怎么做呢,提前谢谢你,请注意这是我使用SAS的头3个小时。我有python方面的经验。

代码目前看起来像这样:

代码语言:javascript
运行
复制
      dateVar=year(&dateVar.)*100+month(&dateVar.);
        
        

        if &devSampleStart.<=dateVar<=&devSampleEnd. then
            sample='dev'; 
            
        else if &baseSampleStart.<=dateVar<=&baseSampleEnd. then 
                   sample='base';
        else if &recSample.=dateVar then 
                   sample='rec ';
        else       sample='    ';

日志副本:

代码语言:javascript
运行
复制
MPRINT(CALCMIGRATIONMATRIX):   dateVar=year(snapshot_date1)*100+month(snapshot_date1);
SYMBOLGEN:  Macro variable DEVSAMPLESTART resolves to 200709
SYMBOLGEN:  Macro variable DEVSAMPLEEND resolves to 201809
MPRINT(CALCMIGRATIONMATRIX):   if 200709<=dateVar<=201809 then sample='dev';
SYMBOLGEN:  Macro variable BASESAMPLESTART resolves to 201909
SYMBOLGEN:  Macro variable BASESAMPLEEND resolves to 201909
MPRINT(CALCMIGRATIONMATRIX):   else if 201909<=dateVar<=201909 then sample='base';
SYMBOLGEN:  Macro variable RECSAMPLE resolves to 202009
MPRINT(CALCMIGRATIONMATRIX):   else if 202009=dateVar then sample='rec ';
MPRINT(CALCMIGRATIONMATRIX):   else sample='    ';
SYMBOLGEN:  Macro variable DATEVAR resolves to snapshot_date1
SYMBOLGEN:  Macro variable BASESAMPLEEND resolves to 201909
MPRINT(CALCMIGRATIONMATRIX):   if mod(month(snapshot_date1),100)=mod(201909,100) then yearlyTimeSlice=1;
MPRINT(CALCMIGRATIONMATRIX):   else yearlyTimeSlice=0;
SYMBOLGEN:  Macro variable ACCOUNTID resolves to account_id
SYMBOLGEN:  Macro variable RATINGVAR resolves to rating
MPRINT(CALCMIGRATIONMATRIX):   keep account_id rating dateVar sample yearlyTimeSlice;
MPRINT(CALCMIGRATIONMATRIX):   run;

NOTE: Character values have been converted to numeric values at the places given by: (Line):(Column).
      1304:173   1304:34    1304:120   1304:159   
NOTE: Invalid numeric data, 'dev' , at line 1304 column 173.
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-12 23:02:35

如果您的日期变量确实是带有日期格式的数字(如DDMMYY10)。则错误不是来自日期值的测试。

所以听起来SAMPLE要么是一个现有的数值变量。或者,您的数据步骤中的一些早期代码引用了SAMPLE,这导致SAS将变量定义为数字。

要根据现有变量的类型更改生成的代码,需要在开始生成使用它的代码之前执行test the variable。例如,您可以设置宏可以测试的宏变量,并确定要生成的代码。

如果您想将SAMPLE创建为一个新变量,那么您可能只想有条件地删除任何具有该名称的现有变量。

代码语言:javascript
运行
复制
data want;
  set have (
%if %varexist(have,sample) %then %do;
    drop=sample 
%end;
  );
  length sample $4 ;
  if &devSampleStart.<=dateVar<=&devSampleEnd. then sample='dev'; 
  else ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67057957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档