Z drugiej strony kilka jego cech budzi raczej krytykę. Język ma więcej wspólnego ze stylem programowania z lat 60., w takich językach jak Fortran, czy Basic, niż ze współczesnymi koncepcjami programistycznymi. Ma instrukcje poke, peek, czy goto, ale nie ma zwykłych definiowanych przez użytkownika procedur i obiektów, a jedynie predefiniowane instrukcje zwane procedurami oraz predefiniowane obiekty. SAS 4GL jest czasem bardzo zagmatwany i ma pełno wyjątków. Przykłady: instrukcja label zmienna='xyz'; nada zmiennej etykietę 'xyz', ale instrukcja: label zmienna=''; nie usunie tej etykiety lecz nada etykietę będącą tekstem pustym. Żeby usunąć etykietę należy napisać pomiędzy apostrofami spację: label zmienna=' ';

pętli do...end można używać tylko w data stepie. Poza data stepem można używać pętli %do...%end ale tylko w obrębie słów kluczowych %macro...%mend. Poza definicją makra i data stepem w ogóle nie da się używać pętli, przez co kod często sztucznie wkłada się do makra. &a to wartość makrozmiennej o nazwie "a". Jednak wartość makrozmiennej, której nazwa jest przechowywana w makrozmiennej "a", to nie &&a lecz &&&a.