@@ -80,7 +80,7 @@ def _parse_value(raw: str) -> Any:
8080
8181def _compare_sas (left : Any , right : Any , op : str ) -> bool :
8282 """Implements SAS-style comparison where None (missing) is smallest."""
83- if op == "=" : return left == right
83+ if op in { "=" , "==" } : return left == right
8484 if op == "!=" : return left != right
8585
8686 # Missing value logic for <, <=, >, >=
@@ -425,7 +425,7 @@ def _eval_expr(node: Dict[str, Any], row: Dict[str, Any], formats: Optional[Dict
425425 return left * right
426426 if op == "/" :
427427 return left / right
428- if op in {"=" , "!=" , "<" , "<=" , ">" , ">=" }:
428+ if op in {"=" , "==" , " !=" , "<" , "<=" , ">" , ">=" }:
429429 return _compare_sas (left , right , op )
430430 raise RuntimeFailure (
431431 "SANS_RUNTIME_UNSUPPORTED_EXPR_NODE" ,
@@ -494,7 +494,7 @@ def _eval_expr_assert(
494494 op = node .get ("op" )
495495 left = _eval_expr_assert (node .get ("left" ), tables , formats )
496496 right = _eval_expr_assert (node .get ("right" ), tables , formats )
497- if op in {"=" , "!=" , "<" , "<=" , ">" , ">=" }:
497+ if op in {"=" , "==" , " !=" , "<" , "<=" , ">" , ">=" }:
498498 return _compare_sas (left , right , op )
499499 if op in {"+" , "-" , "*" , "/" }:
500500 if left is None or right is None :
@@ -568,7 +568,7 @@ def _eval_expr_sql(node: Dict[str, Any], row: Dict[str, Any], col_map: Dict[str,
568568 return left * right
569569 if op == "/" :
570570 return left / right
571- if op in {"=" , "!=" , "<" , "<=" , ">" , ">=" }:
571+ if op in {"=" , "==" , " !=" , "<" , "<=" , ">" , ">=" }:
572572 return _compare_sas (left , right , op )
573573 raise RuntimeFailure (
574574 "SANS_RUNTIME_UNSUPPORTED_EXPR_NODE" ,
0 commit comments