diff --git a/sasdocs/objects.py b/sasdocs/objects.py
index 3958f48..0ec2506 100644
--- a/sasdocs/objects.py
+++ b/sasdocs/objects.py
@@ -650,6 +650,33 @@ class macro(baseSASObject):
         self.shortDesc = re.sub(r'\s+',' ',self.shortDesc)       
 
 
+@attr.s
+class macroCall(baseSASObject):
+    """
+    Abstracted python class for SAS macro call.
+    
+    This class parses a SAS macro call. 
+
+    .. code-block:: sas
+
+        %runMacro;
+        
+        /*and*/
+
+        %runMacro(arg1=A);
+
+
+    Attributes
+    ----------
+    name : str 
+        Name of the marco
+    arguments : list, optional
+        List of macroarguments parsed from the macro defintion
+    """
+    name = attr.ib()
+    arguments = attr.ib()
+
+
 # Parsy Objects
 # Define reFlags as ignorecase and dotall to capture new lines
 reFlags = re.IGNORECASE|re.DOTALL
@@ -845,6 +872,12 @@ mcroStart = ps.seq(
 
 mcroEnd = (ps.regex(r'%mend.*?;',flags=re.IGNORECASE)).map(macroEnd)
 
+mcroCall = ps.seq(
+    name = ps.regex(r'%') >> sasName,
+    arguments = (opspc >> mcroargline).optional(),
+    _col = opspc + col
+).combine_dict(macroCall)
+
 # fullprogram: multiple SAS objects including macros
-fullprogram =  (nl|mcvDef|cmnt|datastep|proc|sql|lbnm|icld|mcroStart|mcroEnd).optional()
+fullprogram =  (nl|mcvDef|cmnt|datastep|proc|sql|lbnm|icld|mcroStart|mcroEnd|mcroCall).optional()
 

diff --git a/tests/test_objects.py b/tests/test_objects.py
index 352ad42..03e1f5f 100644
--- a/tests/test_objects.py
+++ b/tests/test_objects.py
@@ -224,6 +224,18 @@ def test_macro_children_parse(case, expected):
     assert force_partial_parse(fullprogram, case)[0].contents == expected
 
 
+testcases = [
+    (r'%runMacro;',macroCall(name=['runMacro'], arguments=None)),
+    (r"%runMacro(A=B, C=D);",macroCall(name=['runMacro'], arguments=[macroargument(arg=['A'],default=["B"],doc=None),macroargument(arg=['C'],default=["D"],doc=None)]))
+]
+
+@pytest.mark.parametrize("case,expected", testcases)
+def test_macro_call_parse(case, expected):
+    assert mcroCall.parse(case) == expected
+
+
+
+
 testcases = [("""
 libname a "path/to/folder";
 %let a = 1;

Parse calls to macros
# Issue

Call to macros are not parsed and so drop the over all parsed percentage for the sasProgram. Must be careful not to capture macro language as macro calls 

```sas
/*This*/
%runMacro;

/*Not this*/
%put;
```
tests/test_objects.py::test_sasname_parse[test-expected0] tests/test_objects.py::test_sasname_parse[&test-expected1] tests/test_objects.py::test_sasname_parse[&test.-expected2] tests/test_objects.py::test_sasname_parse[&&test&test.-expected3] tests/test_objects.py::test_sasname_parse[ab&test-expected4] tests/test_objects.py::test_sasname_parse[ab&test.-expected5] tests/test_objects.py::test_sasname_parse[ab&test.ab-expected6] tests/test_objects.py::test_sasname_parse[ab&test.ab&test-expected7] tests/test_objects.py::test_sasname_parse[ab&test.ab&test.-expected8] tests/test_objects.py::test_sasname_parse[ab&test.abab&test.ab-expected9] tests/test_objects.py::test_dataObject_parse[lib.test-expected0] tests/test_objects.py::test_dataObject_parse[&test.test-expected1] tests/test_objects.py::test_dataObject_parse[lib.&test.-expected2] tests/test_objects.py::test_dataObject_parse[lib.ab&test.-expected3] tests/test_objects.py::test_dataObject_parse[lib.ab&test-expected4] tests/test_objects.py::test_dataObject_parse[lib.ab&test.ab-expected5] tests/test_objects.py::test_dataObject_parse[lib.ab&test.ab&test-expected6] tests/test_objects.py::test_dataObject_parse[li&lib.b.ab&test.ab&test.-expected7] tests/test_objects.py::test_dataObject_parse[ab&lib.&lib.aa.ab&test.abab&test.ab-expected8] tests/test_objects.py::test_dataLineOption_parse[(where=(1=1))-expected0] tests/test_objects.py::test_dataLineOption_parse[(drop=a)-expected1] tests/test_objects.py::test_dataLineOption_parse[(drop=a tests/test_objects.py::test_dataLineOption_parse[(where=(1=1) tests/test_objects.py::test_dataLine_parse[test tests/test_objects.py::test_dataStep_parse[data tests/test_objects.py::test_procedure_parse[proc tests/test_objects.py::test_libname_parse[libname tests/test_objects.py::test_include_parse[*Comment;-expected0] tests/test_objects.py::test_include_parse[/*Comment*/-expected1] tests/test_objects.py::test_create_table_parse[create tests/test_objects.py::test_sql_parse[proc tests/test_objects.py::test_macroVariableDefinition_parse[%let tests/test_objects.py::test_macroargument_parse[a-expected0] tests/test_objects.py::test_macroargument_parse[a=1-expected1] tests/test_objects.py::test_macroargument_parse[a tests/test_objects.py::test_macroargument_parse[a/*Docs*/-expected5] tests/test_objects.py::test_macroargument_parse[a=1/*Docs*/-expected6] tests/test_objects.py::test_macroargumentLine_parse[(a, tests/test_objects.py::test_macroargumentLine_parse[(a=1, tests/test_objects.py::test_macroargumentLine_parse[(a=1/*Doc tests/test_objects.py::test_macro_start_parse[%macro tests/test_objects.py::test_macro_parse[%macro tests/test_objects.py::test_macro_about_parse[%macro tests/test_objects.py::test_macro_options_parse[%macro tests/test_objects.py::test_macro_children_parse[%macro tests/test_objects.py::test_macro_call_parse[%runMacro;-expected0] tests/test_objects.py::test_macro_call_parse[%runMacro(A=B, tests/test_objects.py::test_force_partial_parse[\nlibname tests/test_objects.py::test_force_partial_marco_parse[\nlibname tests/test_objects.py::test_force_partial_incomplete_marco_parse[\nlibname