def execute_table(self, _output_type, **kwargs: dict) -> '<STR_LIT>':
left = kwargs.pop('<STR_LIT:left>', None)<EOL>top = kwargs.pop('<STR_LIT>', None)<EOL>sets = dict(classes=set(), vars=set())<EOL>left._gather(sets)<EOL>if top: top._gather(sets)<EOL>table = topand '<STR_LIT>' % (str(left), str(top))or str(left)<EOL>proc_kwargs = dict(<EOL>cls='<STR_LIT:U+0020>'.join(sets['<STR_LIT>']),<EOL>var='<STR_LIT:U+0020>'.join(sets['<STR_LIT>']),<EOL>table=table<EOL>)<EOL>proc_kwargs.update(kwargs)<EOL>required_options = {'<STR_LIT>', '<STR_LIT>', '<STR_LIT>'}<EOL>allowed_options = {'<STR_LIT>', '<STR_LIT>', '<STR_LIT>', '<STR_LIT>'}<EOL>verifiedKwargs = sp.sasproccommons.SASProcCommons._stmt_check(self, required_options, allowed_options,<EOL>proc_kwargs)<EOL>if (_output_type == '<STR_LIT>'):<EOL><INDENT>code = "<STR_LIT>" % (<EOL>self.data.libref, self.data.table, self.data._dsopts())<EOL><DEDENT>else:<EOL><INDENT>code = "<STR_LIT>" % (self.data.libref, self.data.table, self.data._dsopts())<EOL><DEDENT>for arg, value in verifiedKwargs.items():<EOL><INDENT>code += "<STR_LIT>" % (arg == '<STR_LIT>' and '<STR_LIT:class>' or arg, value)<EOL><DEDENT>code += "<STR_LIT>"<EOL>if self.sas.nosub:<EOL><INDENT>print(code)<EOL>return<EOL><DEDENT>ll = self.data._is_valid()<EOL>if _output_type == '<STR_LIT>':<EOL><INDENT>if not ll:<EOL><INDENT>html = self.data.HTML<EOL>self.data.HTML = <NUM_LIT:1><EOL>ll = self.sas._io.submit(code)<EOL>self.data.HTML = html<EOL><DEDENT>if not self.sas.batch:<EOL><INDENT>self.sas.DISPLAY(self.sas.HTML(ll['<STR_LIT>']))<EOL>check, errorMsg = self.data._checkLogForError(ll['<STR_LIT>'])<EOL>if not check:<EOL><INDENT>raise ValueError("<STR_LIT>" + errorMsg)<EOL><DEDENT><DEDENT>else:<EOL><INDENT>return ll<EOL><DEDENT><DEDENT>elif _output_type == '<STR_LIT:text>':<EOL><INDENT>if not ll:<EOL><INDENT>html = self.data.HTML<EOL>self.data.HTML = <NUM_LIT:1><EOL>ll = self.sas._io.submit(code, '<STR_LIT:text>')<EOL>self.data.HTML = html<EOL><DEDENT>print(ll['<STR_LIT>'])<EOL>return<EOL><DEDENT>elif _output_type == '<STR_LIT>':<EOL><INDENT>return self.to_nested_dataframe(code)<EOL><DEDENT>
executes a PROC TABULATE statement 

You must specify an output type to use this method, of 'HTML', 'text', or 'Pandas'.
There are three convenience functions for generating specific output; see:
    .text_table()
    .table()
    .to_dataframe()

:param _output_type: style of output to use
:param left: the query for the left side of the table
:param top: the query for the top of the table
:return: